Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python请求模块发出的PUT请求没有数据_Python_Json_Django_Django Rest Framework_Python Requests - Fatal编程技术网

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

使用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":

我正在开发一个Python REST api,对于服务器端,我正在使用Django和Django REST框架。我设法在chrome中使用AdvancedRestClient成功地测试了我的api,但我无法让它与python请求一起工作

我的ARC请求如下所示:

对于我的测试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框架

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=。谢谢大家的帮助。