Ajax 与 Django
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的更多相关文章
- [Django 1.5] jQuery/Ajax 在Django使用 ,如何更新模板里里变量
最近希望实现一个页面局部刷新的功能,于是开始查阅ajax资料.幸好现在ajax很多功能都封装在jQuery这个库里面,我们可以很方便去调用.通过学习几个简单的小例子,可以实现简单的前端代码更新,还有重 ...
- ajax向Django前后端提交请求和CSRF跨站请求伪造
1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...
- 8.ajax与django后台json数据的交互
1新建django项目名为json_ajax,应用名为app,在templates模板中新建ajax.html文件 ajax.html <!DOCTYPE html> <html l ...
- Ajax在Django中的应用
一.什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传 ...
- 【extjs6学习笔记】1.4 初始:ajax请求django应用
使用sencha创建应用,默认如下: personnel数据使用的是本地数据 做以下修改,使用ajax 启动时会报404[此次调用是使用nginx部署] django应用app_jiake中,修改vi ...
- AJAX与Django
AJAX 什么是AJAX? AJAX不是JavaScript的规范,它的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求.提交任务之 ...
- 前端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 ...
- AJAX向Django后端提交POST请求
一.ajax登录示例 二.CSRF跨站请求伪造 方式一 方式二 方式三 方式四 一.ajax登录示例 urls.py from django.conf.urls import url from dja ...
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
随机推荐
- Ansible16:Playbook高级用法
目录 本地执行 任务委托 任务暂停 滚动执行 只执行一次 设置环境变量 交互式提示 本地执行 如果希望在控制主机本地运行一个特定的任务,可以使用local_action语句. 假设我们需要配置的远程主 ...
- 转《深入理解 Java 内存模型》读书笔记
转:https://mp.weixin.qq.com/s/2hA6u4hLEPWlTPdD-XB-bg 前提 <深入理解 Java 内存模型>程晓明著,该书在以前看过一遍,现在学的东西越多 ...
- Neo4j 第八篇:投射和过滤
投射子句用于定义如何返回数据集,并可以对返回的表达式设置别名,而过滤子句用于对查询的结果集按照条件进行过滤 一,Return子句 使用return子句返回节点,关系和关系. 1,返回节点 MATCH ...
- Java高级工程师面试宝典
Java高级工程师面试宝典 JavaSE 多线程 进程与线程的区别? 答:进程是所有线程的集合,每一个线程是进程中的一条执行路径,线程只是一条执行路径. 为什么要用多线程? 答:提高程序效率 多线程创 ...
- jQuery中的动画(七)
一.jQuery对象样式相关方法1.设置高度和宽度height([num]) [获取或设置样式属性height的值]获取匹配元素中第一个元素的height样式值或给匹配所有元素设置height样 ...
- Extjs 树菜单的自动展开数据的请求
今天在做extjs开发的时候,在树菜单上遇到了一个坑,也许是我刚接触extjs 不熟的缘故 问题描述:后台设置的树自动展开,但是在前端总是只显示一条数据,但是数据确实都请求到了. 经过几个小时不屑的努 ...
- Windows 2016 & Windows 10 中IIS安装和配置PHP的步骤
Windows 2016 和 Windows 10 内核是相同的,我们首先需要安装 Internet Information Services (IIS),当然 Win2016 跟 Win10 安装 ...
- Docker在Centos 7上的部署
Docker在Centos 7上的部署 方法1---开启centos 7上自带的 extras YUM源,然后 yum install docker来安装 安装前必须保证 Linux Kernel ...
- Nginx 核心配置-location的匹配案例实战篇
Nginx 核心配置-location的匹配案例实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.location语法规则介绍 在没有使用正则表达式的时候,nginx会先在 ...
- TCP 通信时序及状态变迁
TCP 通信时序及状态变迁 参考链接: https://www.cnblogs.com/boxker/p/11214886.html https://blog.csdn.net/miss_ruoche ...