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)