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实现的简单RPG游戏流程实例
Jun 28 Python
Python中的__slots__示例详解
Jul 06 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
儿童学习python的一些小技巧
May 27 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
Python插件机制实现详解
May 04 Python
教你漂亮打印Pandas DataFrames和Series
May 29 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的输入输出流
2007/02/14 PHP
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
python redis 删除key脚本的实例
2019/02/19 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
岗位职责范本
2013/11/23 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
三年级数学教学反思
2014/01/31 职场文书
金融事务专业求职信
2014/04/25 职场文书
python 批量压缩图片的脚本
2021/06/02 Python
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏
Python代码实现双链表
2022/05/25 Python