zoukankan      html  css  js  c++  java
  • Django如何解析前端传递的请求参数

    一、在Django函数视图中,request是一个必传参数,那么request参数到底是什么?

    首先使用print函数打印一下request,可以看到request是一个WSGIRequest对象,然后使用__mro__来查看其继承关系,发现request实际上是HttpRequest对象

    打断点调试,查看request对象中包含了哪些数据,可以看到request中包含了请求的所有信息

    二、前端传递不同参数,如何从request对象中获取?

    首先,需要清楚前端传递参数的类型有哪些:路径参数、查询字符串参数、请求体参数(json、www-form-urlencoded、form-data、binary)、请求头参数

    1、路径参数

      1)url路径中传递的参数,如:projects/2/ 中的2即为路径参数

      2)在函数视图中通过同名位置参数来接收即可,如:pk

    2、查询字符串参数

      1) url路径中?后面的key=value参数,如:projects/?name=xx&leader=ppd  中的name和leader即为查询字符串参数

      2)使用request.GET获取

    值得注意的是:

    1)request.GET返回的是QueryDict,类似python的Dict类型,但不是Dict,获取QueryDict的value,可以使用request.GET["key"] 或 request.GET.get("key")

    2)当查询字符串参数的key有多个value时,如:projects/?name=xx&name=yy,使用request.GET["key"] 或 request.GET.get("key")获取的是最后一个value值即“hh”,此时,可以使用request.GET.getlist("key")获取name所有的value值组成的列表(注:dict是不支持getlist方法的)

    3、请求体参数:

    1)json:请求体中json格式的参数,一般是bytes类型,content-type 为 application/json

    使用 request.body 获取

    注意:request.body返回的是bytes类型,需要使用json.loads()转换为字典类型,即json.loads(request.body)

    2)www-form-urlencoded:请求体中form表单参数,只能是key-value形式,一般是在前端页面中使用表单录入的参数,content-type为application/www-form-urlencoded

    有两种获取表单参数的方式:1⃣️ request.POST,此种方式返回的是QueryDict  2⃣️ request.body,此种方式返回的是bytes类型

    注意:一般情况下使用 request.POST 获取表单参数,而不用 request.body 获取

    3)form-data:请求体中form-data参数,可以是key-value形式,也可以是二进制数据(视频/文件/图片),content-type 为 multipart/data

    解析前端传递的form-data参数:1⃣️ 当传递的是纯文本参数(key-value)时,使用 request.POST 获取,返回的是QueryDict;2⃣️ 当传递的是二进制数据时,使用 request.FILES 获取,返回的是文件流(可以打开衣柜文件,将获取的文件流写入即可)

     

    4)file(binary):请求体中传递的二进制数据(文件/视频/图片)

    可以使用 request.body 获取

    4、请求头参数:即在请求头中传递的参数

    获取方式有两种:1)使用request.headers["key"] 或 request.headers.get("key") 获取

            2)使用request.META["转化后的key"]

               转化后的key = HTTP_ + key大写(注意:如果key中含有-,则-会被转化为_,所以请求头参数中不能包含下划线,否则解析时会出错)

    注意:一般情况下使用第二种获取方式

    特别说明:META中存储的是所有请求的元数据信息

    本博客仅为本人学习过程中的记录,欢迎一起交流经验。
  • 相关阅读:
    python——numpy模块
    python——xlrd、xlwt、xlutils模块
    python——json&pickle模块
    python——sys模块
    python——os模块
    python——random模块
    python——time模块
    linux命令 pwd
    linux 里面ls命令!!
    校花网图片爬取
  • 原文地址:https://www.cnblogs.com/panpanda/p/15071182.html
Copyright © 2011-2022 走看看