如何在Django中使用HTTP POST请求接收JSON数据?
我想通过HTTP POST请求发送一些JSON数据,并在Django中接收这些数据。
我试过用request.POST['data']
、request.raw_post_data
和request.body
,但是都没能成功。
我的views.py文件是:
import json
from django.http import StreamingHttpResponse
def main_page(request):
if request.method=='POST':
received_json_data=json.loads(request.POST['data'])
#received_json_data=json.loads(request.body)
return StreamingHttpResponse('it was post request: '+str(received_json_data))
return StreamingHttpResponse('it was GET request')
我使用requests模块来发送JSON数据。
import requests
import json
url = "http://localhost:8000"
data = {'data':[{'key1':'val1'}, {'key2':'val2'}]}
headers = {'content-type': 'application/json'}
r=requests.post(url, data=json.dumps(data), headers=headers)
r.text
r.text
应该能打印出消息和发送的数据,但我就是解决不了这个简单的问题。请告诉我在Django中如何获取发送的数据?
3 个回答
-4
创建一个表单,里面有数据字段,字段类型可以是 CharField
(字符字段)或者 TextField
(文本字段),然后对输入的数据进行验证。
87
对于Python3,你需要先解码内容:
received_json_data = json.loads(request.body.decode("utf-8"))
151
你这里搞混了表单编码和JSON数据。request.POST['foo']
是用来处理表单编码的数据的。而你现在发送的是原始的JSON数据,所以应该使用request.body
。
received_json_data=json.loads(request.body)