32 ajax发送文件+stringify与parse方法+dataType参数+序列化模块
一、ajax发送文件
ajax发送文件需要借助于js内置对象FormData
ab_ajax.html
"en"> "UTF-8">Title 文件数据:"file" id="i1"> 普通数据:"text" id="i2"> 普通数据:"text" id="i3">
views.py
from django.shortcuts import render,HttpResponse,redirect def ab_file(request): if request.is_ajax(): // 判断是否是ajax请求 if request.method == 'POST': print(request.POST) print(request.FILES) return HttpResponse('OK') """ 总结: 1.需要利用内置对象FormData // 2 添加普通的键值对 formDateObj.append('username',$('#d1').val()); formDateObj.append('password',$('#d2').val()); // 3 添加文件对象 formDateObj.append('myfile',$('#d3')[0].files[0]) 2.需要指定两个关键性的参数 contentType:false, // 不需使用任何编码 django后端能够自动识别formdata对象 processData:false, // 告诉你的浏览器不要对你的数据进行任何处理 3.django后端能够直接识别到formdata对象并且能够将内部的普通键值自动解析并封装到request.POST中 文件数据自动解析并封装到request.FILES中
二、stringify与parse方法
JavaScript中关于JSON对象和字符串转换的两个方法:
JSON.parse(): 用于将一个 JSON 字符串转换为 JavaScript 对象(json只认双引的字符串格式)
JSON.parse('{"name":"Howker"}'); JSON.parse('{name:"Stack"}') ; // 错误 JSON.parse('[18,undefined]') ; // 错误
JSON.stringify(): 用于将 JavaScript 值转换为 JSON 字符串。
JSON.stringify({"name":"Tonny"})
三、dataType参数
date参数前后端交互 如果采用的是ajax 那么后端的返回值应该使用字典(json格式)
"""前后端交互 如果采用的是ajax 那么后端的返回值应该使用字典(json格式)""" 当后端采用HttpResponse返回json格式数据到ajax异步回调函数默认情况下需要我们自己做反序列化JSON.parse如果不想自己处理可以添加dataType:"JSON" 如果后端是采用JsonResponse返回json格式数据则无需我们自己处理也不需要添加 dataType:"JSON"参数(加了也不影响) # 以后推荐加上 增加程序兼容性
ab_ajax.html
"en"> "UTF-8">Title
views.py
from django.shortcuts import render, HttpResponse, redirect import json from django.http import JsonResponse def ab_json(request): back_dic = {'code':None,'msg':None} back_dic['code'] = 10000 back_dic['msg'] = '一切正常' # return HttpResponse(json.dumps(back_dic)) return JsonResponse(back_dic) """前后端交互 如果采用的是ajax 那么后端的返回值应该使用字典(json格式)""" 当后端采用HttpResponse返回json格式数据到ajax异步回调函数默认情况下需要我们自己做反序列化JSON.parse如果不想自己处理可以添加dataType:"JSON" 如果后端是采用JsonResponse返回json格式数据则无需我们自己处理也不需要添加 dataType:"JSON"参数(加了也不影响) # 以后推荐加上 增加程序兼容性
四、序列化
Django内置的serializers
什么意思呢?就是我的前段想拿到由ORM得到的数据库里面的一个个用户对象,我的后端想直接将实例化出来的数据对象直接发送给客户端,那么这个时候,就可以用Django给我们提供的序列化方式
def ser(request): #拿到用户表里面的所有的用户对象 user_list=models.User.objects.all() #导入内置序列化模块 from django.core import serializers #调用该模块下的方法,第一个参数是你想以什么样的方式序列化你的数据 ret=serializers.serialize('json',user_list) return HttpResponse(ret)
from django.core import serializers def ab_ser(request): data = models.Books.objects.all() # new_list = [] # for obj in data: # 数据对象 # temp_dict = {} # temp_dict['table'] = 'app01.Books' # temp_dict['pk'] = obj.pk # temp_dict['title'] = obj.title # temp_dict['price'] = obj.price # temp_dict['publish_name'] = obj.publish_name # new_list.append(temp_dict) # return JsonResponse(new_list, safe=False) # 调用该模块下的方法,第一个参数是你想以什么样的方式序列化你的数据 ret = serializers.serialize('json', data) # DRF的前身 等同于上面的步骤 return HttpResponse(ret)