zoukankan      html  css  js  c++  java
  • 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"],
    }
    

      

  • 相关阅读:
    在阿里云上遇见更好的Oracle(三)
    从传统IT快速走向公共云计算
    在阿里云上遇见更好的Oracle(二)
    Oracle 11g 审计跟踪管理
    在阿里云上遇见更好的Oracle(一)
    Elasticsearch中的DocValues
    初识Django —Python API接口编程入门
    为什么mysqld启动报错
    云计算产品的四件套
    说说云计算中的地域和可用区概念
  • 原文地址:https://www.cnblogs.com/sch01ar/p/14293513.html
Copyright © 2011-2022 走看看