前后端交互三种编码格式
url编码处理前后端交互的数据编码格式
urlencoded
formdata
application/json
form表单
form表单默认是urlencoded编码格式传输数据
urlencoded数据格式:
username=jason&password=123
django后端针对该格式的数据会⾃动解析并帮你打包到request.POST中
formdata数据格式:
django后端针对符合urlencoded编码格式数据(普通键值对)还是统⼀解析到request.POST中
⽽针对formdata⽂件数据就会⾃动解析放到request.FILES中
application/json(form⽆法发送json格式的数据)
django后端针对json格式数据并不会做任何的处理
⽽是直接放在request.body中
ajax提交
ajax默认的也是urlencoded编码格式
前后端数据交互编码格式与数据格式⼀定要⼀致
不能骗⼈家,声明什么编码格式,就⽤传什么格式
$('#d2').on('click',function () {
$.ajax({
url:'',
type:'post',
contentType:'application/json',  // 修改content-Type参数
data:JSON.stringify({'username':'jason','password':123}),  // 将数据序列化成json格式字符串
success:function (data) {
alert(data)
}
})
})
# 真的·
后端怎么拿json数据?
前端不会处理json格式的数据,⽽是直接塞进request.body中。我们⾃⼰处理json格式数据,拿到的是⼆进制json 我们⾃⼰怎么拿?
我们⾃⼰处理,解码,反序列化
json.loads能够⾃动解码并且序列化
def ab_ct(request):
hod == 'POST':
# ⾃⼰处理json格式数据
json_bytes = request.body
# 扩展 json.loads能够⾃动解码并序列化
json_dict = json.loads(json_bytes)
print(json_dict,type(json_dict))
print(request.POST)
print(request.FILES)
return render(request,'ab_ct.html')
AJAX发送⽂件
1.利⽤内置对象FormData
2.需要额外修改两个参数的值
processData:false
contentType:false
3.data只需要放FormData⽣成的对象即可
django后端能够⾃动识别FormData对象
django后端会将该编码格式中符合username=jason&password=123格式数据
还是解析放到request.POST中⽽针对⽂件数据则会解析放到request.FILES
这个对象可以传普通键值对,也可以传⽂件
jQ new关键字⽣成对象
ajax发送⽂件(******)
内置对象FormData
即发普通键值对也发⽂件
// ajax发送⽂件数据需要借助于内置对象
$('#d3').click(function () {
// 1 需要先⽣成⼀个内置对象
var myFormData = new FormData();
// 2 传普通键值对当普通键值对较多的时候我们可以利⽤for循环来添加
myFormData.append('username','jason');
myFormData.append('password',123);
// 3 传⽂件
myFormData.append('myfile',$('#i1')[0].files[0]);  // 获取input框内部⽤户上传的⽂件对象
// 发送ajax请求
$.ajax({
url:'',
type:'post',
data:myFormData,
// 发送formdata对象需要指定两个关键性的参数
processData:false,  // 让浏览器不要对你的数据进⾏任何的操作
contentType:false,  // 不要使⽤任何编码格式对象formdata⾃带编码格式并且django能够识别该对象    success:function (data) {
alert(data)
}
})
})
⾃动序列化
借助serializers帮你⾃动完成序列化
from app01 import models
import serializers
def ab_se(request):
user_queryset = models.Userinfo.objects.all()
user_list = []
for user_obj in user_queryset:
user_list.append({
'username':user_obj.username,
'password':user_obj.password,
'gender':_gender_display(),
})
res = json.dumps(user_list)
res = serializers.serialize('json',user_queryset)  # 序列化
return HttpResponse(res)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。