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登录好友QQ空间点赞的示例代码
Nov 04 Python
django和vue实现数据交互的方法
Aug 21 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
使用npy转image图像并保存的实例
Jul 01 Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 Python
python如何发送带有附件、正文为HTML的邮件
Feb 27 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
用PHP连接Oracle数据库
2006/10/09 PHP
20个PHP常用类库小结
2011/09/11 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
PHP加密解密类实例代码
2016/07/20 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
javascript offsetX与layerX区别
2010/03/12 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
用CSS3实现无限循环的无缝滚动的示例代码
2017/11/01 HTML / CSS
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
strstr()的简单实现
2013/09/26 面试题
给全校老师的建议书
2014/03/13 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书
论群众路线学习笔记
2014/11/06 职场文书
盲山观后感
2015/06/11 职场文书
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle