• Django:RestFramework之-------解析器


    7.解析器

    • 依靠Content-Type对用户的请求体中的数据进行解析。

    7.1django中的解析器

    • 前戏:django中的request.POST/request.body

    • request.POST中有值的条件:

      • 如果请求头中的:Content-Type:application/x-www-form-urlencoded。request.POST才有值。(去request.body中解析)

      • 数据格式必须要求: name=mei&age=20&gender=女

        如:

      ​ 1.form表单提交

      ​ 2.ajax提交数据是字典 默认会转换成 name=mei&age=20&gender=女 的格式

    7.2rest_framework中解析器

    from rest_framework.parsers import JSONParser,FormParser
    class ParseView(APIView):
        ##"能解析Content-Type:
        # application/json格式和application/x-www-form-urlencodeed"
        parser_classes = [JSONParser,FormParser]
    
        def post(self,request,*args,**kwargs):
            """
            允许用户发送JSON格式数据:
                格式1:Content-Type : application/json
                格式2:{"name":"aaa",age:"bbb"}
            :param request:
            :param args:
            :param kwargs:
            :return:
            """
            #1.获取用户请求头:
            #2.获取用户请求体
            #3.根据用户请求头和parser_classes=[JSONParser,FormParser]中支持的请求头进行比较
            #4JSONParser对象去请求体
            #5.request.data触发解析
            print(request.data)
            print(type(request.data))#<class 'dict'>
            return HttpResponse("ParaserView")
    
    • 如果要做上传操作
    from rest_framework.parsers import FileUploadParser
    在某个视图类添加:
    class ParseView(APIView):
    	parser_classes = [FileUploadParser,]
    	def get(self,request,*args,**kwargs):
    		request.FILES
    	def post(self,request,*args,**kwargs):
    		...
    

    7.3全局配置解析器

    • 使用解析器,可在全局配置,个别视图需要上传文件可以用局部解析器配置:parser_classes = [FileUploadParser,]
    settings.py
    REST_FRAMEWORK = [
    	"DEFAULT_PARSER_CLASSES":[
    	'rest_framework.parsers.JSONParser',
    	'rest_framework.parsers.FormParser',
            ...
    	]
    ]
    
    • 源码流程 & 本质:
      • 本质:
        • 请求头
        • 状态码
        • 请求方法
      • 源码流程
        • dispatch
        • request.data
  • 相关阅读:
    [python]windows截图
    [python]PyPI使用国内源
    [MySQL]配置多个MySQL服务(Windows)
    [C#]中获取当前程序运行路径的方法
    [C#]统计文本文件txt中的行数(快速读取)
    [C#]获取连接MySql数据库及常用的CRUD操作
    html和css高级
    html和css进阶
    html和css入门
    Git 简介
  • 原文地址:https://www.cnblogs.com/xujunkai/p/11849886.html
Copyright © 2020-2023  润新知