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具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
随机推荐
- 优先队列 + 模拟 - HDU 5437 Alisha’s Party
Alisha’s Party Problem's Link Mean: Alisha过生日,有k个朋友来参加聚会,由于空间有限,Alisha每次开门只能让p个人进来,而且带的礼物价值越高就越先进入. ...
- Mysql load data infile 命令格式
[1]Linux系统环境下 LOAD DATA INFILE /usr/LOCAL/lib/ubcsrvd/datacsv/201909_source.csv INTO TABLE np_cdr_20 ...
- Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!
有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你就知道松哥说的是对的了! 在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是 ...
- WPF XAML的读法
XAML 一直以为读作X-A-M-L 不过 一直都是念错了 正确念法:ZAMMEL 类似:ZeIMO [平音]
- RandomAccessFile vs FileChannel.open(path);
What kind of FileChannel object does the FileChannel.open(path) method return? Is it still random ac ...
- NoSql的对比以及键值对的存储方式(为什么速度特别快)
什么是NoSql NoSQL(Not Only SQL),泛指非关系型的数据库,是对不同于传统的关系型数据库的数据库管理系统的统称,强调Key-Value Stores和文档数据库的优点.为了解决大规 ...
- 视频监控GB28181测试参考
说明: 1. 需要对前端摄像机和后端NVR.解码器.平台进行GB28181测试和开发的人员.本文档提供的一些测试细节,比如测试环境,SIP消息格式说明,SDP文本信息字段说明,GB28181测试注意 ...
- 并发编程需要场景化:CountDownLatch
- python 数据结构之图的储存方式
参考链接:https://blog.csdn.net/u014281392/article/details/79120406 所描述的图的结构为: 下面介绍不同的储存方式,我想不必详细分别是每个名称都 ...
- Java进程间通信学习
转自:https://www.iteye.com/blog/polim-1278435 进程间通信的主要方法有:(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共 ...