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之集成开发环境(IDE)
Sep 12 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
Python动态生成多维数组的方法示例
Aug 09 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
Django对models里的objects的使用详解
Aug 17 Python
Python中socket网络通信是干嘛的
May 27 Python
关于python的缩进规则的知识点详解
Jun 22 Python
Python 在局部变量域中执行代码
Aug 07 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
Pytest allure 命令行参数的使用
Apr 18 Python
Python绘制地图神器folium的新人入门指南
May 23 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 __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
php和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
Vue 组件注册全解析
2020/12/17 Vue.js
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
详解python之heapq模块及排序操作
2019/04/04 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
Django单元测试工具test client使用详解
2019/08/02 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
pandas 数据类型转换的实现
2020/12/29 Python
经典公益广告词
2014/03/13 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
2014年底个人工作总结
2015/03/10 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android