特点
异步提交,局部刷新
朝后端发送请求的方式
1.浏览器地址栏直接输入url回车-------GET
2.a标签href-----------------------GET
3.form表单------------------------GET/POST
4.ajax----------------------------GET/POST
ajax不是新的编程语言,而是一种使用现有标准的新方法
不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容
基本语法
$(‘#d1‘).click(function(){
$.ajax({
// 1.指定往哪个后端发送请求
url:‘‘,
// 2.请求方式
type:‘post‘,
// 3.数据
data:{},
// 4.回调函数:当后端给你返回结果的时候会自动出发,args用来接收后端返回结果
dataType:true,
success:function(args){
alert(args)
}
})
})
字典的返回,需要序列化 dumps,前端:JSON.parse
from django.http import JsonResponse
return JsonResponse(d) # 传到前端的直接转成对象了
"""
回调函数是不会自动帮你序列化的
可以使用JsonResponse返回数据,因为可以自动序列化
"""
前后端传输数据的编码格式(contentType)
from表单
默认的编码格式是urlencoded
username=jason&password=123
django针对符合urlencoded编码格式的数据都会自动帮你解析封装到request.POST中
如果把编码格式改成formdata,那么针对普通的键值对还是解析到request.POST中,而将文件解析到request.FILES中
from表单时没法发送json格式数据的
ajax
$(‘#d1‘).click(function(){
$ajax({
url:‘‘,
type:‘post‘,
data:{‘username‘:‘‘,‘password‘:‘‘}
success:function(){
}
})
})
默认的编码格式也是urlencoded
username=jason&password=123
django针对符合urlencoded编码格式的数据都会自动帮你解析封装到request.POST中
ajax发送json格式数据
$(‘#d1‘).click(function(){
$ajax({
url:‘‘,
type:‘post‘,
contentType:‘application/json‘, # 指定编码格式为json
data:JSON.stringify({‘username‘:‘‘,‘password‘:‘‘}),
success:function(args){
}
})
})
## 这个时候后端如何处理呢?
request.is_ajax() # 判断当前请求是否是Ajax请求,返回布尔值
request.body # b‘{‘username‘:‘‘,‘password‘:‘‘}‘
json_bytes = request.boby
json_str = json_bytes.decode(‘utf8‘)
json_dict = json.loads(json_str)
其实json.loads() 可以自动解码再反序列化
json_dict = json.loads(json_bytes)
ajax发送文件
ajax发送文件需要借助于js内置对象FormData
$(‘#d1‘).click(fuction(){
let formDataObj = new FormData() # 生成一个formData对象
// 可以添加普通键值对
formDataObj.append(‘username‘,$(‘#d1‘).val())
formDataObj.append(‘password‘,$(‘#d2‘).val())
// 也可以添加文件对象
formDataObj.append(‘myfile‘,$(‘#d3‘)[0].files[0]) # 获取文件对象
$.ajax({
url:‘‘,
type:‘post‘,
data:formDataObj, # 直接将对象放在data这
// 发送文件必须指定的参数
contentType:false, # 不需要用任何编码,django后端能都自动识别formdata对象
processData:false, # 告诉浏览器,不要对数据进行任何处理
success:function(args){
}
})
})
# 那么后端如何处理呢?
request.POST
request.FILES
"""
1.需要利用内置对象FormData
2.需要指定两个参数:contengType,processData,设置为false
3.django后端能够识别到formdata对象,并且能够将内部普通见键值对封装到POST,文件封装到FILES
"""
django自带序列化组件(drf)
# 前后端分离的项目,后端只需要写代码将数据处理好,能够序列化返回给前端即可
[{},{},{}]
from django.core import serializers
res = serializers.serialize(‘json‘,user_queryset) # 可以直接将数据编程json格式的数据
批量插入数据
book_list = []
for i in range(100000):
book_obj = models.Book(title=‘第%s本书‘%i)
book_list.append(book_obj)
models.Book.objects.bulk_create(book_list)
"""
当你想要批量插入数据的时候,使用ORM提供的
bulk_create(),很快
"""
Ajax