【发布时间】:2016-05-17 07:59:26
【问题描述】:
我正在开发一个 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)
【问题讨论】:
-
您的请求在我看来是正确的。尝试使用
http://httpbin.org/put查看您实际发送的内容。 -
可以在token前加Token吗? "令牌'966271f8-94a3-4232-95f7-953f3b7989f3'"
-
请将
print json.dumps(json.loads(r.text), indent=4)和print r.status_code添加到您的snipplet 并报告结果。 (同时在Authorization标头中添加Token。) -
我正在使用我自己的自定义授权,因此不需要令牌。我设法让它工作,请参阅下面的评论。
标签: python json django django-rest-framework python-requests