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中的全局变量用法分析
Jun 09 Python
python函数形参用法实例分析
Aug 04 Python
python如何为创建大量实例节省内存
Mar 20 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
Python生成一个迭代器的实操方法
Jun 18 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
python 自动化偷懒的四个实用操作
Apr 11 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 Error与Logging函数的深入理解
2013/06/03 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
AngularJS控制器之间的数据共享及通信详解
2016/08/01 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
JMS中Topic和Queue有什么区别
2013/05/15 面试题
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
优秀演讲稿范文
2013/12/29 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
企业公益活动策划方案
2014/08/24 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
营业用房租赁协议书
2014/11/26 职场文书
python中print格式化输出的问题
2021/04/16 Python
为Centos安装指定版本的Docker
2022/04/01 Servers