【发布时间】:2019-08-03 08:25:06
【问题描述】:
我正在使用 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 的文档中找不到任何关于框架如何处理此问题的内容,因此我通过执行以下操作获得了包含 json 对象的QueryDict:
request.query_params # Should yield a dict -> {foo=[bar,baz]}
如何在 Django Rest Framework 中解码 JSON 编码的 URL?
请注意,我的实际参数要复杂得多。使用 POST 不是因为调用者严重依赖缓存和书签
【问题讨论】:
-
你为什么要这样发送数据?能改吗?
-
之所以以那种形式接收数据,是因为API接收了大量的输入参数。我无法改变这一点,因为我不拥有我客户的代码。即使我这样做了,这仍然是禁止 POST 的最佳方式。
-
在 URL 中发送结构化表单参数没有标准,因此
request.query_params不能只解析声称包含结构的随机格式。我们只有url-encoded query parameters,其中包含一系列name=value对,由&分隔。 -
所以你真正应该做的是to prefix the json string with a key name,所以它至少可以被提取为另一个查询参数。请注意,URL 有一个rather low length limit。
标签: python json django django-rest-framework urlencode