簡體   English   中英

如何從 Django 中的編碼 URL 獲取請求參數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM