Django Rest 框架:空 request.data
Django Rest Framework: empty request.data
我有以下用于查看 DRF 的代码:
from rest_framework import viewsets
class MyViewSet(viewsets.ViewSet):
def update(self, request, pk = None):
print pk
print request.data
我通过 python-requests 以下列方式调用 URL:
import requests
payload = {"foo":"bar"}
headers = {'Content-type': 'application/json'}
r = requests.put("https://.../myPk", data= payload, headers=headers)
但是当从服务器收到请求时,request.data是空的。这里有输出:
myPk
<QueryDict: {}>
我该如何解决这个问题?
您需要将 payload
作为序列化 json
对象发送。
import json
import requests
payload = {"foo":"bar"}
headers = {'Content-type': 'application/json'}
r = requests.put("https://.../myPk/", data=json.dumps(payload), headers=headers)
否则 DRF 实际上会抱怨:
*** ParseError: JSON parse error - No JSON object could be decoded
您可以通过调试视图(例如使用 pdb or ipdb)或像这样打印变量来看到该错误消息:
def update(self, request, pk = None):
print pk
print str(request.data)
假设您使用的是足够新的请求版本,您需要执行以下操作:
import requests
payload = {"foo":"bar"}
r = requests.put("https://.../myPk", json=payload, headers=headers)
然后它将为您正确格式化有效负载并提供适当的 headers。否则,您发送的 application/x-www-urlformencoded
数据 DRF 将无法正确解析,因为您告诉它您正在发送 JSON.
在此处检查 2 个问题:-
- Json格式是否正确
- Url 是否正确(我在 url 中缺少尾随反斜杠,因此我遇到了这个问题)
希望对您有所帮助
我有以下用于查看 DRF 的代码:
from rest_framework import viewsets
class MyViewSet(viewsets.ViewSet):
def update(self, request, pk = None):
print pk
print request.data
我通过 python-requests 以下列方式调用 URL:
import requests
payload = {"foo":"bar"}
headers = {'Content-type': 'application/json'}
r = requests.put("https://.../myPk", data= payload, headers=headers)
但是当从服务器收到请求时,request.data是空的。这里有输出:
myPk
<QueryDict: {}>
我该如何解决这个问题?
您需要将 payload
作为序列化 json
对象发送。
import json
import requests
payload = {"foo":"bar"}
headers = {'Content-type': 'application/json'}
r = requests.put("https://.../myPk/", data=json.dumps(payload), headers=headers)
否则 DRF 实际上会抱怨:
*** ParseError: JSON parse error - No JSON object could be decoded
您可以通过调试视图(例如使用 pdb or ipdb)或像这样打印变量来看到该错误消息:
def update(self, request, pk = None):
print pk
print str(request.data)
假设您使用的是足够新的请求版本,您需要执行以下操作:
import requests
payload = {"foo":"bar"}
r = requests.put("https://.../myPk", json=payload, headers=headers)
然后它将为您正确格式化有效负载并提供适当的 headers。否则,您发送的 application/x-www-urlformencoded
数据 DRF 将无法正确解析,因为您告诉它您正在发送 JSON.
在此处检查 2 个问题:-
- Json格式是否正确
- Url 是否正确(我在 url 中缺少尾随反斜杠,因此我遇到了这个问题)
希望对您有所帮助