• 「Django」rest_framework学习系列-解析器


    满足两个要求,request.Post中才有值
    1.请求头要求:
    请求头中的Content-Type为application/x-www-form-urlencoded
    2.数据格式要求
    name=x&age=xx&gender=x
    如:
    a.form表单提交

    <form methed..>
      input
    </form>
    View Code

    b.ajax提交

    $.ajax({
        url:..
        type:POST
        headers:{Content-Type:application/json}
        data:{name:xx,age=xx} #内部转化为 name=xx&age=xx&gender=xx
    })

    没有值情况一:请求头不是规定格式,body有值,POST没值

    $.ajax({
        url:..
        type:POST
        headers:{Content-Type:application/json}
        data:{name:xx,age=xx} #内部转化为 name=xx&age=xx&gender=xx
    })
    View Code

    没有值情况二:请求头和数据格式都不对

    $.ajax({
        url:..
        type:POST
        headers:{Content-Type:application/json}
        data:JSON.stringfy({name:xx,age=xx}) #{name:xx,age:xx}
    })
    View Code

    --rest_framework解析器 对请求数据进行解析

    from rest_framework.parsers import JSONParser,FormParser
    
    class ParserView(APIView):
        parser_classes = [JSONParser,FormParser]
        #JSONParser表示只能解析content-type:application/json头
        #FormParser表示解析content-type:application/x-www-form-urlencoded头
        def post(self,request,*args,**kwargs):
            '''parser_classes = [JSONParser]
            允许用户发送JSON格式数据
            a.content-type:application/json
            b.{'name':xx,age:xx}
            '''
            #获取解析后的结果
            print(request.data)
        return HttpResponse('用户列表')
    View Code

    全局配置
    #解析器配置

    'DEFAULT_PARSER_CLASSES':['rest_framework.parsers.JSONParser','rest_framework.parsers.FormParser']
    解析后的数据需要在request.data中去取值
    即request._request.POST.get('xxx')替换为request.data.get('xxx')
    class JSONParser(BaseParser):
    class FormParser(BaseParser):
    class MultiPartParser(BaseParser):
    class FileUploadParser(BaseParser):
    下面两个是上传文件
  • 相关阅读:
    网络编程之粘包问题
    网络编程初识和socket套接字
    面向对象三大特性
    面向对象进阶
    面向对象初接触
    常用模块(模块初步了解)
    异常处理
    Ubutu Chrome 出现adobe flash is out of date的解决方法
    cmder默认的命令提示符λ改成$
    css在盒子中垂直居中和固定居中
  • 原文地址:https://www.cnblogs.com/wrxblog/p/10402568.html
Copyright © 2020-2023  润新知