使用Python请求模块发出的PUT请求没有数据
我正在开发一个Python REST api,对于服务器端,我正在使用Django和Django REST框架。我设法在chrome中使用AdvancedRestClient成功地测试了我的api,但我无法让它与python请求一起工作 我的ARC请求如下所示: 对于我的测试Python请求,我编写了以下代码:使用Python请求模块发出的PUT请求没有数据,python,json,django,django-rest-framework,python-requests,Python,Json,Django,Django Rest Framework,Python Requests,我正在开发一个Python REST api,对于服务器端,我正在使用Django和Django REST框架。我设法在chrome中使用AdvancedRestClient成功地测试了我的api,但我无法让它与python请求一起工作 我的ARC请求如下所示: 对于我的测试Python请求,我编写了以下代码: import requests import json payload = {"TimeStamp": "2016-02-07T13:38:16Z", "DateInserted":
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框架
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)
默认情况下,DRF有一个尾随空格。而不是
http://127.0.0.1:8000/api/Readings
可能是http://127.0.0.1:8000/api/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={})
我认为你的要求是正确的。尝试使用
http://httpbin.org/put
查看您实际发送的内容。您能在您的令牌之前添加令牌吗?“令牌'966271f8-94a3-4232-95f7-953f3b7989f3'”请将print json.dumps(json.loads(r.text),indent=4)
和print r.status\u code
添加到您的snipplet并报告结果。(还要在授权
标题中添加令牌
。)我正在使用自己的自定义授权,因此不需要令牌。我设法让它工作请看下面的评论。我设法让它工作。为了做到这一点,我不得不改变两件事。当我添加/到读数时,我开始看到数据通过,但格式不正确。因此,我必须更改的第二件事是将data=替换为json=。谢谢大家的帮助。