我有以下代码来查看DRF:
from rest_framework import viewsets
class MyViewSet(viewsets.ViewSet):
def update(self, request, pk = None):
print pk
print request.data
我通过URL调用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 要么 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)
然后它将为您正确格式化有效负载并提供适当的标头。否则,你正在发送 application/x-www-urlformencoded
DRF无法正确解析的数据,因为您告诉它您正在发送JSON。