django查询优化及ajax编码格式下发送数据 总结
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
- 异步提交 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中;
django查询优化及ajax编码格式下发送数据 总结的更多相关文章
- 关于form表单或者Ajax向后台发送数据时,数据格式的探究
最近在做一个资产管理系统项目,其中有一个部分是客户端向服务端发送采集到的数据的,服务端是Django写的,客户端需要用rrequests模块模拟发送请求 假设发送的数据是这样的: data = {'s ...
- ajax处理回调函数,用ajax向后台发送数据
这是我的后台返回给前台的数据: 处理后台返回的数据有一下两种方式: function sethouse_housing_pattern(housing_pattern){ var str=[]; va ...
- 前端笔记之服务器&Ajax(下)数据请求&解决跨域&三级联动&session&堆栈
一.请求后端的JSON数据 JSON是前后端通信的交互格式,JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. JSON是互联网各个后台与 ...
- 使用ajax向后台发送数据
第一种最原始的方式就是手动拼接json数组: var name="text"; $.ajax({ url:"". data:{'name':name} succ ...
- 创建下拉列表并通过ajax填充下拉数据
$(document).ready(function(e) { jQuery.post('${basePath}/customerService/getCustomerService4List.do' ...
- django之ORM的查询优化、Ajax 06
目录 ORM查询优化 only与defer select_related与prefetch_related查询优化 choices参数 MTV与MVC模型 Ajax简介 AJAX常见应用情景 AJAX ...
- django中的ajax组件
目录 django中的ajax 向服务器发送请求的途径 Ajax的特点 基于jquery实现的ajax请求 利用ajax实现计算器 利用ajax实现登陆认证 利用form表单进行文件上传 利用ajax ...
- 根据Django后台的ajax大全
一.什么是ajax 1.1 什么是JSON? AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语 ...
- Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据
路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P&l ...
随机推荐
- ubuntu上安装及使用docker
关于Docker: Docker 是一个开源项目,为开发者和系统管理员提供了一个开放的平台,在任何地方通过打包和运行应用程序作为一个轻量级的容器.Docker 在软件容器内自动部署应用程序.Docke ...
- DLL导出函数
使用DEF文件从DLL导出 模块定义(.def)文件时包含一个或多个描述DLL各种属性的Module语句的文本文件.如果不使用_declspec(dllexport)关键字导出DLL的函数,则DLL需 ...
- 嵌套泛型参数IList<IList<Object>>如何传参
在调用第三方库的时候,有这么一个泛型参数,如下图: 按照经验,使用两个List嵌套声明变量即可: IList<IList<AnnotatedPoint2D>> outImag ...
- 进阶Python:装饰器 全面详解
进阶Python:装饰器 前言 前段时间我发了一篇讲解Python调试工具PySnooper的文章,在那篇文章开始一部分我简单的介绍了一下装饰器,文章发出之后有几位同学说"终于了解装饰器的用 ...
- mysql在B-Tree上创建伪哈希索引
构建哈希的过程 select过程 长字符串下,构建索引可通过自定义哈希作为索引,本人通过实验,在3百多个数据记录的下,性能效果很明显,完全不是一个等级.以下为索引前后几种情况对比 无索引的url:直接 ...
- 深入理解计算机系统 第十一章 网络编程 part2 第二遍
客户端和服务器通过因特网这个全球网络来通信.从程序员的观点来看,我们可以把因特网看成是一个全球范围的主机集合,具有以下几个属性: 1.每个因特网主机都有一个唯一的 32 为名字,称为它的 IP 地址 ...
- mybatis中collection子查询注入参数为null
具体实现参照网上,但是可能遇到注入参数为null的情况,经过查阅及自己测试记录一下: 子查询的参数中,有<if test="">之类,需要指定别名,通过 http:// ...
- 【原创】大叔经验分享(56)hue导出行数限制
/opt/cloudera/parcels/CDH/lib/hue/apps/beeswax/src/beeswax/conf.py # Deprecated DOWNLOAD_CELL_LIMIT ...
- LCN分布式事务管理(一)
前言 好久没写东西了,9月份换了份工作,一上来就忙的要死.根本没时间学东西,好在新公司的新项目里面遇到了之前没遇到过的难题.那遇到难题就要想办法解决咯,一个请求,调用两个服务,同时操作更新两个数据库. ...
- mysql一些语句
<!-- 报警量排行按创建时间每月来排行 --> <select id="alarmDaySort" resultType="alarm"&g ...