• DRF


    https://www.cnblogs.com/sch01ar/p/11271914.html

    request.POST 的数据是从 request.body 中提取的,request.POST 有数据需要两个前提条件。

    一,请求头中 Content-Type 的值为 application/x-www-form-urlencoded

    二,POST 传递的数据格式类似为:username=admin&password=admin123

    如果是使用 form 表单提交,也满足上述条件

    如果使用 ajax 进行如下的提交,也满足上述条件

    $.ajax({
        url:...,
        type:POST,
        // 内部转化为 username=admin&password=admin123
        data:{
    	"username": "admin",
    	"password": "admin123"
        }
    })
    

    但是在 ajax 中设置请求头为其它或者数据格式改为 json,则不满足上述条件

    $.ajax({
    	url:...,
    	type:POST,
    	// 设置请求头
    	headers:{"Content-Type": "application/json"}
    	// 转为 json 数据
    	data:JSON.stringfy({
    		"username": "admin",
    		"password": "admin123"
    	})
    })
    

    这两种情况下 request.body 中有数据,而 request.POST 中无数据

    views.py:

    from django.shortcuts import HttpResponse
    from rest_framework.views import APIView
    from rest_framework.parsers import JSONParser, FormParser
    
    
    class ParserView(APIView):
    
        # 局部解析类
        parser_classes = [JSONParser, FormParser, ]
    
        def post(self, request, *args, **kwargs):
            # 打印解析后的结果
            print(request.data)
            return HttpResponse("ParserView Page")
    

    JSONParser:只能解析请求头中含 content-type: application/json 的数据

    FormParser:只能解析请求头中含 content-type: application/x-www-form-urlencoded 的数据

    parser_classes 中这么设置两个,则遇到哪个请求头处理哪个的数据

    提交 json 头的数据

    打印的内容:

    提交 form 头的数据

    打印的结果:

    form 应该传的参数为 username=admin&password=admin123

    可以在 settings.py 中配置全局解析类

    REST_FRAMEWORK = {
        "DEFAULT_PARSER_CLASSES": ["rest_framework.parsers.JSONParser", "rest_framework.parsers.FormParser"],
    }
    

      

  • 相关阅读:
    ABAP中的‘多线程’
    SAP数据库表维护视图分配事务代码
    SAP调用外部数据库
    ABAP-小技巧/知识(1)
    sap中用函数增加断点(break point)
    把内表 itab1 的 n1 到 n2 行内容附加到 itab2 内表中去.
    ABAP打开TCODE
    查看用户下有那些事务码
    check、continue、exit的区别
    将excel数据导入内表的函数
  • 原文地址:https://www.cnblogs.com/sch01ar/p/14293513.html
Copyright © 2020-2023  润新知