使用Python请求模块发出的PUT请求没有数据

时间:2016-02-07 17:05:03

标签: python json django django-rest-framework python-requests

我正在开发一个Python REST api,而对于服务器端我正在使用Django和django-rest-framework。我设法使用chrome中的AdvancedRestClient成功测试了我的api,但我无法使用python请求。

我的ARC请求如下所示: enter image description here

对于我的测试Python请求,我编写了以下代码:

import requests
import json

payload = {"TimeStamp": "2016-02-07T13:38:16Z", "DateInserted": "2016-02-07T13:38:18Z", "Value": 17.145, "Sensor": 1}
url = "http://127.0.0.1:8000/api/Readings"
headers = {"Content-Type": "application/json", "Authorization": "966271f8-94a3-4232-95f7-953f3b7989f3"}
r = requests.put(url, data=json.dumps(payload), headers=headers)

我使用json=而不是data=尝试了很多不同的事情,但是当我们的请求到达我的服务器端时似乎总是没有数据内容。我在网上搜索过但找不到任何使用POST请求的可行示例,所以我希望有人能够亲身体验一下这些第一手资料。

更新 以下代码现在适用于django-rest-framework。

payload = {"TimeStamp": "2016-02-07T13:38:16Z", "DateInserted": "2016-02-07T13:38:18Z", "Value": 12.123, "Sensor": 1}
url = "http://127.0.0.1:8000/api/Readings/"
headers = {"Content-Type": "application/json", "Authorization": "966271f8-94a3-4232-95f7-953f3b7989f3"}
r = requests.put(url, data=json.dumps(payload), headers=headers)

1 个答案:

答案 0 :(得分:1)

默认情况下,DRF有一个尾随空格。代替 http://127.0.0.1:8000/api/Readings它应该是http://127.0.0.1:8000/api/Readings/。我建议将Readings设为小写,因为它很容易忘记它是大写的

我使用的API测试的一般结构是:

from django.core.urlresolvers import reverse

from rest_framework.test import APITestCase, APIClient

class TestReadings(APITestCase):

    def setUp(self):
        self.client = APIClient()

    def test_put(self):

        url = reverse('readings', kwargs={}) # 'readings' here is the named url
        request = self.client.post(url, data={})