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


Posted in Python onMarch 25, 2020

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 相关文章推荐
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
python+opencv轮廓检测代码解析
Jan 05 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
pandas dataframe的合并实现(append, merge, concat)
Jun 24 Python
python制作朋友圈九宫格图片
Nov 03 Python
python中自带的三个装饰器的实现
Nov 08 Python
OpenCV 之按位运算举例解析
Jun 19 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 #Python
python实现3D地图可视化
Mar 25 #Python
简单了解django处理跨域请求最佳解决方案
Mar 25 #Python
python3利用Axes3D库画3D模型图
Mar 25 #Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 #Python
Django用数据库表反向生成models类知识点详解
Mar 25 #Python
Python动态强类型解释型语言原理解析
Mar 25 #Python
You might like
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
配置支持SSI
2006/11/25 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
php while循环控制的简单实例
2016/05/30 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
用Python编写web API的教程
2015/04/30 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
基于python时间处理方法(详解)
2017/08/14 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
建筑专业自荐信
2013/10/18 职场文书
教职工代表大会主持词
2014/04/01 职场文书
优秀党务工作者事迹材料
2014/05/07 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
革命电影观后感
2015/06/18 职场文书
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
详解MySQL中的pid与socket
2021/06/15 MySQL