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格式的数据

  1. 需要在前端新增一个参数

    contentType:'application/json'

  2. 需要将数据序列化成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编码格式下发送数据 总结的更多相关文章

  1. 关于form表单或者Ajax向后台发送数据时,数据格式的探究

    最近在做一个资产管理系统项目,其中有一个部分是客户端向服务端发送采集到的数据的,服务端是Django写的,客户端需要用rrequests模块模拟发送请求 假设发送的数据是这样的: data = {'s ...

  2. ajax处理回调函数,用ajax向后台发送数据

    这是我的后台返回给前台的数据: 处理后台返回的数据有一下两种方式: function sethouse_housing_pattern(housing_pattern){ var str=[]; va ...

  3. 前端笔记之服务器&Ajax(下)数据请求&解决跨域&三级联动&session&堆栈

    一.请求后端的JSON数据 JSON是前后端通信的交互格式,JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. JSON是互联网各个后台与 ...

  4. 使用ajax向后台发送数据

    第一种最原始的方式就是手动拼接json数组: var name="text"; $.ajax({ url:"". data:{'name':name} succ ...

  5. 创建下拉列表并通过ajax填充下拉数据

    $(document).ready(function(e) { jQuery.post('${basePath}/customerService/getCustomerService4List.do' ...

  6. django之ORM的查询优化、Ajax 06

    目录 ORM查询优化 only与defer select_related与prefetch_related查询优化 choices参数 MTV与MVC模型 Ajax简介 AJAX常见应用情景 AJAX ...

  7. django中的ajax组件

    目录 django中的ajax 向服务器发送请求的途径 Ajax的特点 基于jquery实现的ajax请求 利用ajax实现计算器 利用ajax实现登陆认证 利用form表单进行文件上传 利用ajax ...

  8. 根据Django后台的ajax大全

    一.什么是ajax 1.1 什么是JSON? AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语 ...

  9. Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据

    路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P&l ...

随机推荐

  1. ubuntu上安装及使用docker

    关于Docker: Docker 是一个开源项目,为开发者和系统管理员提供了一个开放的平台,在任何地方通过打包和运行应用程序作为一个轻量级的容器.Docker 在软件容器内自动部署应用程序.Docke ...

  2. DLL导出函数

    使用DEF文件从DLL导出 模块定义(.def)文件时包含一个或多个描述DLL各种属性的Module语句的文本文件.如果不使用_declspec(dllexport)关键字导出DLL的函数,则DLL需 ...

  3. 嵌套泛型参数IList<IList<Object>>如何传参

    在调用第三方库的时候,有这么一个泛型参数,如下图: 按照经验,使用两个List嵌套声明变量即可: IList<IList<AnnotatedPoint2D>>  outImag ...

  4. 进阶Python:装饰器 全面详解

    进阶Python:装饰器 前言 前段时间我发了一篇讲解Python调试工具PySnooper的文章,在那篇文章开始一部分我简单的介绍了一下装饰器,文章发出之后有几位同学说"终于了解装饰器的用 ...

  5. mysql在B-Tree上创建伪哈希索引

    构建哈希的过程 select过程 长字符串下,构建索引可通过自定义哈希作为索引,本人通过实验,在3百多个数据记录的下,性能效果很明显,完全不是一个等级.以下为索引前后几种情况对比 无索引的url:直接 ...

  6. 深入理解计算机系统 第十一章 网络编程 part2 第二遍

    客户端和服务器通过因特网这个全球网络来通信.从程序员的观点来看,我们可以把因特网看成是一个全球范围的主机集合,具有以下几个属性: 1.每个因特网主机都有一个唯一的 32 为名字,称为它的 IP 地址 ...

  7. mybatis中collection子查询注入参数为null

    具体实现参照网上,但是可能遇到注入参数为null的情况,经过查阅及自己测试记录一下: 子查询的参数中,有<if test="">之类,需要指定别名,通过 http:// ...

  8. 【原创】大叔经验分享(56)hue导出行数限制

    /opt/cloudera/parcels/CDH/lib/hue/apps/beeswax/src/beeswax/conf.py # Deprecated DOWNLOAD_CELL_LIMIT ...

  9. LCN分布式事务管理(一)

    前言 好久没写东西了,9月份换了份工作,一上来就忙的要死.根本没时间学东西,好在新公司的新项目里面遇到了之前没遇到过的难题.那遇到难题就要想办法解决咯,一个请求,调用两个服务,同时操作更新两个数据库. ...

  10. mysql一些语句

    <!-- 报警量排行按创建时间每月来排行 --> <select id="alarmDaySort" resultType="alarm"&g ...