Django与AJAX

orm优化查询:

orm优化查询: 

核心: -避免重复调用数据库 ,以表为对象,将对象点属性的方式 ,查询数据
redis / mongodb : 降低主库的压力 (缓存数据库—)
orm模块 本质将一张表 对应为对象 #1.only 与 defer :
--》惰性查询 : 减少数据库操作 降低数据库的压力 only 与 defer 相反 : (字段查询) obj = only('字段1') : 取字段1的值, --》列表套字典
查询其他字段 : 重新查找一条就是查一次数据库 defer 内字段 不在字段内 defer()
defer括号内放什么字段 查询出来的对象就没有该字段属性
总结 : 能少查询一次数据 - 就尽量少查询次!!! #2.select_related 与 prefetch_related: (链表操作) select_related :
--》用于一对一,一对多表对应关系中; 优点: 将表化为对象,不需要重新取数据库操作 prefetch_related : 所有的表关系中
--自动外键查询的所有结果封装到对象中
--》不限制类型 , 为多外键字段,就查询一张表 select_related 与 prefetch_related 的比较:
--》结合实际情况 : 表的大小,张数 耗时操作体现方面:
链表 : 数据库层先链表
子查询 : 查询的次数(表)

MTV 与 MVC模型

MTV 与 MVC模型:
--》django自称为是MTV框架 本质其实还是MVC MTV:
M:models
T:templates
V:views
MVC
M:models
V:views
controller 路由匹配(包含urls)
Vue : -->前端(框架)
--react (基于) 前端乱的原因之一: 更新速度太快

choices 参数

choices  参数:
--》设置字段类型的约束条件(字段条件的选择有限),绑定对应关系 一一对应; 存数字 取的时候按照提前设计的好的对应关系 取出对应的真正的数据! 只要是choices字段类型 在获取值的时候 统一句式:
---》get_字段名_display() eg:
user_obj1 = models.User.objects.get(pk=4)
print(user_obj1.get_gender_display())
# 没有对应关系 获取到的还是数字本身

update 与 save的区别

update 与 save的区别:
--》两者都是对数据的修改保存操作, save()函数是将数据列的全部数据项全部重新写一遍, update()则是针对修改的项进行针对的更新效率高耗时少

AJAX导入:

AJAX:  (Asyn) JS  + XML
使用Javascript语言与服务器进行异步交互,传输的数据为XML 优点: 在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程) AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。 提交方式的不同:
同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。 ajax关键点:
1.局部刷新,2.异步请求

#导入ajax,js通过jquery交互: html
<script>
$('#b1').click(function () {
$.ajax({
url:'',
type:'POST',
data:{i1:$('#i1').val(),i2:$('#i2').val()},
success:function (data) {
$('#i3').val(data)
}
})
}) </script> #view 视图 :
def ajax_test(request):
if request.method=='POST':
i1=request.POST.get('i1')
i2=request.POST.get('i2')
ret=int(i1)+int(i2)
return HttpResponse(ret)
return render(request,'ajax_test.html') ---》当文件框发生了输入变化时,使用AJAX技术向服务器发送一个请求,然后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展示出来 ---》异步: 当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应

Jquery 实现AJAX

jquery 实现AJAX:

--->1. 要先导入jquery 模块
<script src="/static/setup_Ajax.js"></script>
<script>
//给input框绑定一个失去焦点的事件
$('.user').blur(function () {
//$.ajax为固定用法,表示启用ajax
$.ajax({
//url后面跟的是你这个ajax提交数据的路径,向谁提交,不写就是向当前路径提交
url:'',
//type为标定你这个ajax请求的方法
type:'POST',
//data后面跟的就是你提交给后端的数据
data:{'username':$(this).val()},
//success为回调函数,参数data即后端给你返回的数据
success:function (data) {
ret=JSON.parse(data);
if (ret['flag']){
$('p>span').removeClass('hide');
}
}
})
});
</script> view视图 : 模拟登录认证
def index(request):
if request.method=='POST':
ret={'flag':False}
username=request.POST.get('username')
if username=='JBY':
ret['flag']=True
import json
return HttpResponse(json.dumps(ret))
return render(request,'index.html')

ajax基本语法结构

ajax 参数:
data参数中的键值对,如果值值不为字符串,需要将其转换成字符串类型 --》绑定事件 $("#b1").on("click", function () {
$.ajax({
url:"/ajax_add/",
type:"GET",
data:{"i1":$("#i1").val(),"i2":$("#i2").val(),"hehe": JSON.stringify([1, 2, 3])},
success:function (data) {
$("#i3").val(data);
}
})
}) ajax基本语法结构
$.ajax({
url:'', // 数据提交的后端地址 不写就是往当前页面提交 也可以写后缀 也可以写全称 跟actions一样
type:'post', // 提交方式 默认是get请求
data:{'i1':$('#d1').val(),'i2':$('#d2').val()}, // 提交的数据
success:function (data) { // 形参data就是异步提交之后后端返回结果
$('#d3').val(data) // 回调机制需要做的事情
}
})
# 一旦使用了ajax render,redirect,HttpResponse都不再作用与页面 而是与data交互

原生JS 实现AJAX

原生JS 实现AJAX:
var b2 = document.getElementById("b2");
b2.onclick = function () {
// 原生JS
var xmlHttp = new XMLHttpRequest(); # 创建类
xmlHttp.open("POST", "/ajax_test/", true); #urlencoded: 请求方式
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send("username=q1mi&password=123456"); #真实数据
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
alert(xmlHttp.responseText);
}
};
}; readyState ???

前后端传输数据编码格式:

AJAX请求方式:
只要是向我Django提交post请求的数据,都必须校验csrf_token来防伪跨站请求
ajax默认的编码格式也是urlencoded 也就意味着后端django也是将数据解析到request.POST中 POST : request.POST
request.FILES 文件 ajax发送数据的编码格式:
1.urlencoded
2.formdata
3.application / json (json格式) 前端向后端发送请求:
a标签href参数 get请求
form表单 get/post
ajax get/post
form表单发送数据的编码格式:
1.form表单默认的编码方式是urlencoded
Content-Type: application/x-www-form-urlencoded
django后端针对urlencoded数据 会自动解析并且帮你封装到request.POST中 2.form表单发送文件 编码格式 Content-Type: multipart/form-data;
针对formdata格式的数据 你在浏览器上是无法查看到(POST请求)
是一个文件对象django后端也会自动识别帮你放到request.FILES中 3.form表单无法发送json格式的数据 只能借助于ajax 注意: 涉及到前后端交互的时候 一定要做到数据的格式与编码格式一致(即:数据是一种格式 请求头里面是同一种格式)

Ajax如何传输json格式数据

传输类型:
Content-Type: application/json
{"username":"jason","password":"123"}
django后端针对json格式的数据 不会做任何处理 数据怎么来的 会原封不动的放到request.body中 # 触发事件,数据传输!!
$('#d1').click(function () {
$.ajax({
url:'',
type:'post',
contentType:'application/json',
data:JSON.stringify({'username':'jason','password':'123'}),
success:function (data) {
alert(123)
}
})
})

ajax 传输文件数据

->借助内置对象  new  -->生成对象
该对象即可以携带文件数据 同样也支持普通的键值对 $('#d1').click(function () { var MyFormData = new FormData(); // 先生成一个内置对象
// 1. 先添加普通的键值
MyFormData.append('username','jason'); // 添加了一组普通的键值对(多个) // 2. 添加文件数据
MyFormData.append('myfile',$('#d2')[0].files[0]); // 如何获取input框中文件对象$('#d1')[0].files[0]
$.ajax({
url:'',
type:'post',
data:MyFormData,
// 发送文件必须要指定的两个参数
contentType:false, // 不适用任何编码 MyFormData对象内部自带编码 django后端能够识别
processData:false, // 不要处理数据 success:function (data) {
//返回事件 }

序列化:

drf :  django restframework
-->前端想拿到由ORM得到的数据库里面的一个个用户对象,后端想直接将实例化出来的数据对象直接发送给客户端 , 便于前后端的数据交互 ----》 from app01 import models
from django.core import serializers #导入模块serializers
# 序列化目的 将数据整合成一个大字典形式 方便数据的交互 def ser(request):
#拿到用户表里面的所有的用户对象
user_list=models.User.objects.all()
#导入内置序列化模块
from django.core import serializers
#调用该模块下的方法,第一个参数是你想以什么样的方式序列化你的数据
ret=serializers.serialize('json',user_list)
return HttpResponse(ret)

Ajax 与 Django的更多相关文章

  1. [Django 1.5] jQuery/Ajax 在Django使用 ,如何更新模板里里变量

    最近希望实现一个页面局部刷新的功能,于是开始查阅ajax资料.幸好现在ajax很多功能都封装在jQuery这个库里面,我们可以很方便去调用.通过学习几个简单的小例子,可以实现简单的前端代码更新,还有重 ...

  2. ajax向Django前后端提交请求和CSRF跨站请求伪造

    1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...

  3. 8.ajax与django后台json数据的交互

    1新建django项目名为json_ajax,应用名为app,在templates模板中新建ajax.html文件 ajax.html <!DOCTYPE html> <html l ...

  4. Ajax在Django中的应用

    一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传 ...

  5. 【extjs6学习笔记】1.4 初始:ajax请求django应用

    使用sencha创建应用,默认如下: personnel数据使用的是本地数据 做以下修改,使用ajax 启动时会报404[此次调用是使用nginx部署] django应用app_jiake中,修改vi ...

  6. AJAX与Django

    AJAX 什么是AJAX? AJAX不是JavaScript的规范,它的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求.提交任务之 ...

  7. 前端ajax访问 django 报错 POST http://127.0.0.1:8001/xxx 403 (Forbidden)

    前端使用 ajax 访问后端 django 程序 报错误: POST http://127.0.0.1:8001/xxx 403 (Forbidden) 错误原因: 参数中未携带 csrfmiddle ...

  8. AJAX向Django后端提交POST请求

    一.ajax登录示例 二.CSRF跨站请求伪造 方式一 方式二 方式三 方式四 一.ajax登录示例 urls.py from django.conf.urls import url from dja ...

  9. Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)

    12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...

随机推荐

  1. Ansible16:Playbook高级用法

    目录 本地执行 任务委托 任务暂停 滚动执行 只执行一次 设置环境变量 交互式提示 本地执行 如果希望在控制主机本地运行一个特定的任务,可以使用local_action语句. 假设我们需要配置的远程主 ...

  2. 转《深入理解 Java 内存模型》读书笔记

    转:https://mp.weixin.qq.com/s/2hA6u4hLEPWlTPdD-XB-bg 前提 <深入理解 Java 内存模型>程晓明著,该书在以前看过一遍,现在学的东西越多 ...

  3. Neo4j 第八篇:投射和过滤

    投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤 一,Return子句 使用return子句返回节点,关系和关系. 1,返回节点 MATCH ...

  4. Java高级工程师面试宝典

    Java高级工程师面试宝典 JavaSE 多线程 进程与线程的区别? 答:进程是所有线程的集合,每一个线程是进程中的一条执行路径,线程只是一条执行路径. 为什么要用多线程? 答:提高程序效率 多线程创 ...

  5. jQuery中的动画(七)

    一.jQuery对象样式相关方法1.设置高度和宽度height([num])    [获取或设置样式属性height的值]获取匹配元素中第一个元素的height样式值或给匹配所有元素设置height样 ...

  6. Extjs 树菜单的自动展开数据的请求

    今天在做extjs开发的时候,在树菜单上遇到了一个坑,也许是我刚接触extjs 不熟的缘故 问题描述:后台设置的树自动展开,但是在前端总是只显示一条数据,但是数据确实都请求到了. 经过几个小时不屑的努 ...

  7. Windows 2016 & Windows 10 中IIS安装和配置PHP的步骤

    Windows 2016 和 Windows 10 内核是相同的,我们首先需要安装 Internet Information Services (IIS),当然 Win2016 跟 Win10 安装  ...

  8. Docker在Centos 7上的部署

      Docker在Centos 7上的部署 方法1---开启centos 7上自带的 extras YUM源,然后 yum install docker来安装 安装前必须保证 Linux Kernel ...

  9. Nginx 核心配置-location的匹配案例实战篇

    Nginx 核心配置-location的匹配案例实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.location语法规则介绍 在没有使用正则表达式的时候,nginx会先在 ...

  10. TCP 通信时序及状态变迁

    TCP 通信时序及状态变迁 参考链接: https://www.cnblogs.com/boxker/p/11214886.html https://blog.csdn.net/miss_ruoche ...