gpt4 book ai didi

python - 如何从 Django 中的编码 URL 获取请求参数?

转载 作者:行者123 更新时间:2023-12-04 00:27:24 32 4
gpt4 key购买 nike

我正在使用 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"]
}

我在 Django 或 DRF 的文档中找不到任何关于框架如何处理此问题的内容,因此我得到了 QueryDict通过执行以下操作来处理其中的 json 对象:

request.query_params # Should yield a dict -> {foo=[bar,baz]}

如何在 Django Rest Framework 中解码 JSON 编码的 URL?

请注意,我的实际参数要复杂得多。使用 POST 不是因为调用者严重依赖缓存和书签

最佳答案

Django request.GET 对象,以及 Django REST 添加的 request.query_params 别名,只能解析 application/x-www-form-urlencoded query strings , 使用 HTML 表单编码的类型。这种格式只能编码键值对。没有将 JSON 编码为查询字符串的标准,部分原因是 URL 具有 rather limited amount of space .

如果您必须在查询字符串中使用 JSON,那么 prefixed the JSON data with a key name 对您来说会容易得多。 ,因此您至少可以让 Django 为您处理 URL 百分比编码。

例如

/endpoint?json=%7B%0D%0A++%22foo%22%3A%5B%22bar%22%2C%22baz%22%5D%0D%0A%7D

可以通过以下方式访问和解码:

import json

json_string = request.query_params['json']
data = json.loads(json_string)

如果不能添加 json= 前缀,则需要使用 urllib.parse.unquote_plus() 自行解码 URL 百分比编码,来自 request.META['QUERY_STRING'] value :

from urllib.parse import unquote_plus
import json

json_string = unquote_plus(request.META['QUERY_STRING'])
data = json.loads(json_string)

关于python - 如何从 Django 中的编码 URL 获取请求参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55128686/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com