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标准日志模块logging的使用方法
Nov 01 Python
python实现360的字符显示界面
Feb 21 Python
Python简单读写Xls格式文档的方法示例
Aug 17 Python
python K近邻算法的kd树实现
Sep 06 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
使用Python在Windows下获取USB PID&VID的方法
Jul 02 Python
python抓取多种类型的页面方法实例
Nov 20 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python开发一款翻译工具
Oct 10 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
python与idea的集成的实现
Nov 20 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 字符串 小常识
2009/06/05 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
php递归实现无限分类的方法
2015/07/28 PHP
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
three.js搭建室内场景教程
2018/12/30 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python中私有属性的定义方式
2020/03/05 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
优秀教师工作感言
2014/02/16 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
小学老师对学生的评语
2014/12/29 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
神龙架导游词
2015/02/11 职场文书
校友会致辞
2015/07/30 职场文书
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang