Django查询优化及ajax编码格式原理解析

 更新时间:2020年03月25日 09:49:39   作者:jueyuanfengsheng  
这篇文章主要介绍了Django查询优化及ajax编码格式原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

orm查询优化

1)only与refer

​ only方法返回的是一个queryset对象,本质就是列表套数据对象

​ 该对象内只含有only括号所指定的属性(其他属性也可以获取,但是需要重新走数据库查询)

defer与only互为反关系,返回的是一个queryset对象,本质就是列表套数据对象;该对象只含有除了defer括号内所指定的属性(括号内的属性也可以获取但是需要重新走数据库)

2)select_related与prefetch_related

select_related括号内只能放外键字段,并且外键字段的类型只能是一对一或一对多,内部是联表操作,会将外键关联的表与当前表直接拼接起来,然后再执行查询操作,返回的结果也是一个queryset,列表套数据对象,该数据对象获取当前表中的数据或者关联表中的数据,都不会再走数据库;

prefetch_related 括号内外键字段全部支持,内部是子查询,返回的结果也是一个queryset对象,列表套数据对象,该数据对象获取当前表中的数据或者关联表中的数据,都不会再走数据库;

第一个方法耗时主要耗在联表操作,第二个方法耗时主要耗在查询次数;

choices字段

用在一些字段数据是可以明确列出所有的可能的;比如:性别,工作经验,学历,婚否,客户来源等;

1.先定义好对应关系;2.在通过字段的choices参数来指定关系。

gender_choices = (
​ (1,'male'),
​ (2,'female'),
​ (3,'others'),
)
gender = models.IntegerField(choices = gender_choices)

如果数据在你事先定义好的范围内,可以通过get_字段名_display()拿到对应的解释信息。

ajax

1.异步提交 2.局部刷新

ajax基本语法结构

现用的是基于JQuery封装好的ajax,所以用ajax的时候,先导入jQuery;

$.ajax({
	url:'', # 后端的地址,特性跟action一直,三种情况
	type:'post', # 请求方式,小写
	data:{'username':'zhang',password:'123'}, # 提交的数据
	success:function(data){ # data异步提交的结果
		# 回调机制返回的结果
		# window.location.href = url
	}
})
#基于ajax做数据交互,后端无论返回什么结果都会被回调函数捕获,不会再影响整个页面

前后端数据传输编码格式

urlencoded
数据格式username=zhang&password=123
django针对符合urlencoded编码格式的数据,会自动解析并放到request.POST中;

formdata
form表单发送文件必须要指定的编码格式
该编码格式既可以发文件也可以发普通的键值对

django后端自动识别,将内部符合urlencoded编码格式的数据,自动解析并将文件类型的数据解析封装到request.FILES中

application/json
ajax可以发送json格式的数据,form表单不支持
#注意:数据类型和编码格式要保证一致性

ajax如何发送json格式的数据

需要在前端新增一个参数

contentType:'application/json'

需要将数据序列化成json格式的字符串

JSON.stringfy({'username':'zhang','password':'123'})

注意:django后端针对json格式的数据,不会做任何处理,原封不动的在放request.body内

ajax发送文件(不单单可以发送文件,也可以发送普通键值对)

建议借助原生js的内置对象帮你做数据携带

1).先生成一个内置对象

var MyFormData = new FormData();

2).然后朝该对象内添加数据(普通键值对和文件均可)

普通键值对

MyFormData.append('name','value')
MyFormData.append('name1','value1')
MyFormData.append('name2','value2')

文件数据

如何获取input文件标签内文件数据

var MyFileobj = $("input[type='file']")[0].files[0];

3.需要额外指定两个参数

contentType:false, # 不指定任何编码,对象自带编码 django能够识别;

processData:false, # 浏览器不需要对数据进行任何处理

django能够识别对象中的普通的键值对和文件对象,然后分别放到不同的方法POST和FILES中;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于python select.select模块通信的实例讲解

    基于python select.select模块通信的实例讲解

    下面小编就为大家带来一篇基于python select.select模块通信的实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Python设计模式之抽象工厂模式原理与用法详解

    Python设计模式之抽象工厂模式原理与用法详解

    这篇文章主要介绍了Python设计模式之抽象工厂模式,简单讲述了抽象工厂模式的概念、原理并结合实例形式分析了Python实现与使用抽象工厂模式的相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • Python中6种中文文本情感分析的方法详解

    Python中6种中文文本情感分析的方法详解

    中文文本情感分析是一种将自然语言处理技术应用于文本数据的方法,它可以帮助我们了解文本中所表达的情感倾向,Python中就有多种方法可以进行中文文本情感分析,下面就来和大家简单讲讲
    2023-06-06
  • python进阶之协程你了解吗

    python进阶之协程你了解吗

    这篇文章主要为大家详细介绍了python进阶之协程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • python计算圆周率的5种方法

    python计算圆周率的5种方法

    这篇文章主要给大家介绍了关于python计算圆周率的5种方法,圆周率(Pi)是圆的周长与直径的比值,一般用希腊字母π表示,是一个在数学及物理学中普遍存在的数学常数,需要的朋友可以参考下
    2023-07-07
  • 何用Python实现一个 “系统声音” 的实时律动挂件

    何用Python实现一个 “系统声音” 的实时律动挂件

    这篇文章将给大家介绍了如何用 Python 实现一个 “系统声音” 的实时律动挂件,采集后直接实时地在电脑上绘制波形动画,主要是用来作为 FL Studio 播放时的一个桌面小挂件,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-01-01
  • 详解使用CUDA+OpenCV加速yolo v4性能

    详解使用CUDA+OpenCV加速yolo v4性能

    这篇文章主要介绍了使用CUDA+OpenCV加速yolo v4性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python文件操作及内置函数flush原理解析

    Python文件操作及内置函数flush原理解析

    这篇文章主要介绍了Python文件操作及内置函数flush原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Python实例方法、类方法、静态方法区别详解

    Python实例方法、类方法、静态方法区别详解

    这篇文章主要介绍了Python实例方法、类方法、静态方法区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 安装Keras,tensorflow,并实现将虚拟环境添加到jupyter notebook

    安装Keras,tensorflow,并实现将虚拟环境添加到jupyter notebook

    这篇文章主要介绍了安装Keras,tensorflow,并实现将虚拟环境添加到jupyter notebook,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03

最新评论