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 个问题:-

  1. Json格式是否正确
  2. Url 是否正确(我在 url 中缺少尾随反斜杠,因此我遇到了这个问题)

希望对您有所帮助