[英]How to get request parameters from an encoded URL in Django?
我正在使用 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 不是因為調用者嚴重依賴緩存和書簽
Django request.GET
對象和 Django REST 添加的request.query_params
別名只能解析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
可以通過以下方式訪問和解碼:
import json
json_string = request.query_params['json']
data = json.loads(json_string)
如果您無法添加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)
urllib
應該這樣做:
from urllib.parse import unquote
url = "endpoint?%7B%0D%0A++%22foo%22%3A%5B%22bar%22%2C%22baz%22%5D%0D%0A%7D"
url = unquote(url)
print(url)
以上幾乎有效,但編碼可能不正確,不確定:
endpoint?{
++"foo":["bar","baz"]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.