我正在通过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")
答案 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"] 并简化操作。