通过urllib.request发送HTTP帖子时如何解决“此QueryDict实例是不可变的”

时间:2019-04-14 06:58:15

标签: python-3.x urllib

我正在通过urllib.request写一个发件人,但在服务器中得到“此QueryDict实例是不可变的”。

在服务器代码(django tastypie)中添加“ bundle.request.POST._mutable = True”时,此问题已修复。

但是我想知道如何通过发件人进行修复。

python:v3.6 发件人:urllib.request 服务器:django tastypie

发件人:

   cookie = http.cookiejar.MozillaCookieJar()
   handler = urllib.request.HTTPCookieProcessor(cookie)
   opener = urllib.request.build_opener(handler)
   request = urllib.request.Request(url, 
                  data=data,headers=headers,method=method)
   rep = opener.open(request)

服务器中的错误:

File "/python3.6/site-packages/tastypie/resources.py", line 1408, in post_list
    updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))
  File "/python3.6/site-packages/tastypie/resources.py", line 2244, in obj_create
    bundle = self.full_hydrate(bundle)
  File "/python3.6/site-packages/tastypie/resources.py", line 943, in full_hydrate
    bundle = self.hydrate(bundle)
  File "/home/ma/*/api.py", line 115, in hydrate
    bundle.data["create_by"] = user
  File "/python3.6/site-packages/django/http/request.py", line 421, in __setitem__
    self._assert_mutable()
  File "/python3.6/site-packages/django/http/request.py", line 418, in _assert_mutable
    raise AttributeError("This QueryDict instance is immutable")

2 个答案:

答案 0 :(得分:0)

我找到了一个原因,application / x-www-form-urlencoded-> application / json。

答案 1 :(得分:0)

对于那些在他们的请求中获得 Querydict 类型的人,当从 TestCases 发送有效负载时,但在从前端(例如 React)传递数据时获得 Dict - 您可以避免处理Querydict 通过将有效负载作为 JSON 传递,因此,您的 request.data 将是“dict”类型。

示例

payload = {
            "name": "Dict example"
        }

response = self.client.post(ENDPOINT, json.dumps(chat_payload),content_type="application/json"

)

这样,您可以像普通字典一样访问 request.data["name"] 并简化操作。