Django Rest Framework:空的request.data

flo*_*urr 13 python django python-requests django-rest-framework

我有以下代码来查看DRF:

from rest_framework import viewsets

class MyViewSet(viewsets.ViewSet):

    def update(self, request, pk = None):
        print pk
        print request.data
Run Code Online (Sandbox Code Playgroud)

我通过以下方式通过python-requests调用URL :

import requests
payload = {"foo":"bar"}
headers = {'Content-type': 'application/json'}
r = requests.put("https://.../myPk", data= payload, headers=headers)
Run Code Online (Sandbox Code Playgroud)

但是当从服务器收到请求时,request.data为空.这里有输出:

myPk
<QueryDict: {}>
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

sth*_*hzg 13

您需要将其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)
Run Code Online (Sandbox Code Playgroud)

否则会发生什么事情,DRF实际上会抱怨:

*** ParseError: JSON parse error - No JSON object could be decoded
Run Code Online (Sandbox Code Playgroud)

你会通过调试视图(例如使用pdbipdb)或打印变量来看到错误消息:

def update(self, request, pk = None):
    print pk
    print str(request.data)
Run Code Online (Sandbox Code Playgroud)


Har*_*uja 5

在此处检查 2 个问题:-

  1. Json 格式是否正确。
  2. 网址是否正确(我的网址中缺少尾随反斜杠,因此我遇到了问题)

希望能帮助到你