1)only与referhtml
only方法返回的是一个queryset对象,本质就是列表套数据对象前端
该对象内只含有only括号所指定的属性(其余属性也能够获取,可是须要从新走数据库查询)ajax
defer与only互为反关系,返回的是一个queryset对象,本质就是列表套数据对象;该对象只含有除了defer括号内所指定的属性(括号内的属性也能够获取可是须要从新走数据库)数据库
2)select_related与prefetch_relateddjango
select_related括号内只能放外键字段,而且外键字段的类型只能是一对一或一对多,内部是联表操做,会将外键关联的表与当前表直接拼接起来,而后再执行查询操做,返回的结果也是一个queryset,列表套数据对象,该数据对象获取当前表中的数据或者关联表中的数据,都不会再走数据库;json
prefetch_related 括号内外键字段所有支持,内部是子查询,返回的结果也是一个queryset对象,列表套数据对象,该数据对象获取当前表中的数据或者关联表中的数据,都不会再走数据库;后端
第一个方法耗时主要耗在联表操做,第二个方法耗时主要耗在查询次数;浏览器
用在一些字段数据是能够明确列出全部的可能的;好比:性别,工做经验,学历,婚否,客户来源等;app
1.先定义好对应关系;2.在经过字段的choices参数来指定关系。异步
gender_choices = (
(1,'male'),
(2,'female'),
(3,'others'),
)
gender = models.IntegerField(choices = gender_choices)
若是数据在你事先定义好的范围内,能够经过get_字段名_display()拿到对应的解释信息。
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表单不支持 #注意:数据类型和编码格式要保证一致性
须要在前端新增一个参数
contentType:'application/json'
须要将数据序列化成json格式的字符串
JSON.stringfy({'username':'zhang','password':'123'})
注意:django后端针对json格式的数据,不会作任何处理,原封不动的在放request.body内
建议借助原生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中;