如何在Django中使用HTTP POST请求接收JSON数据?

82 投票
3 回答
124346 浏览
提问于 2025-04-18 08:47

我想通过HTTP POST请求发送一些JSON数据,并在Django中接收这些数据。
我试过用request.POST['data']request.raw_post_datarequest.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)

撰写回答