• 周日. 10 月 6th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

Django如何解析前端传递的请求参数

admin

11 月 28, 2021

一、在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中存储的是所有请求的元数据信息

本博客仅为本人学习过程中的记录,欢迎一起交流经验。

发表回复