rit*_*att 3 python django json urlencode django-rest-framework
我正在使用 Django Rest 框架。
API 接收带有编码到 URL 中的 json 对象的 GET 请求。例如:
/endpoint?%7B%0D%0A++%22foo%22%3A%5B%22bar%22%2C%22baz%22%5D%0D%0A%7D
解码参数在哪里
{
"foo":["bar","baz"]
}
Run Code Online (Sandbox Code Playgroud)
我在 Django 或 DRF 的文档中找不到任何指向框架如何处理此问题的内容,以便我QueryDict通过执行以下操作来获取其中的 json 对象:
request.query_params # Should yield a dict -> {foo=[bar,baz]}
如何在 Django Rest Framework 中解码 JSON 编码的 URL?
请注意,我的实际参数要复杂得多。使用 POST 不是因为调用者严重依赖缓存和书签
Djangorequest.GET对象以及request.query_paramsDjango REST 添加的别名只能解析application/x-www-form-urlencoded查询字符串,即使用 HTML 表单编码的类型。这种格式只能编码键值对。没有将 JSON 编码为查询字符串的标准,部分原因是 URL的空间量相当有限。
如果您必须在查询字符串中使用 JSON,那么如果您在 JSON 数据前加上一个键名,对您来说会容易得多,这样您至少可以让 Django 为您处理 URL 百分比编码。
例如
/endpoint?json=%7B%0D%0A++%22foo%22%3A%5B%22bar%22%2C%22baz%22%5D%0D%0A%7D
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式访问和解码:
import json
json_string = request.query_params['json']
data = json.loads(json_string)
Run Code Online (Sandbox Code Playgroud)
如果无法添加json=前缀,则需要使用urllib.parse.unquote_plus(), 从request.META['QUERY_STRING']值中自己解码 URL 百分比编码:
from urllib.parse import unquote_plus
import json
json_string = unquote_plus(request.META['QUERY_STRING'])
data = json.loads(json_string)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6337 次 |
| 最近记录: |