我正在开发一个Python REST api,而对于服务器端我正在使用Django和django-rest-framework。我设法使用chrome中的AdvancedRestClient成功测试了我的api,但我无法使用python请求。
对于我的测试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)
答案 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={})