如何在Django中接收JSON格式的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Django中接收JSON格式的数据相关的知识,希望对你有一定的参考价值。

参考技术A Django获取数据,不管是json格式,还是浏览器地址中拼接的参数,都可以依据不同的协议,用以下的方法获取


从post中取得数据,如果不存在则默认值为1
pageNumber = request.POST.get('pageNumber',1)
从get中取得数据,如果不存在则默认值为1
pageNumber = request.GET.get('pageNumber',1)
3.从所有请求中取得数据,如果不存在则默认值为1
pageNumber = request.REQUEST.get('pageNumber',1)
4.判断一个请求是post还是get方式
if request.method == 'GET': 
    pass
if request.method == 'POST':
    pass
5.判断某个字段是否存在
if 'pageNumber' in request.GET:
    pageNumber = request.GET.get('pageNumber',1)

if 'pageNumber' in request.POST:
    pageNumber = request.POST.get('pageNumber',1)

本回答被提问者采纳

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

【中文标题】如何在 Django 1.6 中使用 HTTP POST 请求接收 json 数据?【英文标题】:How to receive json data using HTTP POST request in Django 1.6? 【发布时间】:2014-07-26 22:35:45 【问题描述】:

我正在学习Django 1.6。 我想使用 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 1.6 中收集发布的数据?

【问题讨论】:

Where's my JSON data in my incoming Django request?的可能重复 【参考方案1】:

对于python3,你必须先解码body:

received_json_data = json.loads(request.body.decode("utf-8"))

【讨论】:

这不再是这种情况,从 Python 3.6 开始,JSON.loads() 接受 bytes 并自动检测用于编码的 UTF 变体。【参考方案2】:

您在这里混淆了表单编码和 JSON 数据。 request.POST['foo'] 用于表单编码数据。您发布的是原始 JSON,因此您应该使用 request.body

received_json_data=json.loads(request.body)

【讨论】:

request.body 包含字节串,而 python3 json.loads 需要一个 str 因此你应该首先解码:data = request.body.decode('utf-8') received_json_data = json.loads(data) 但上面说他试过request.body,怎么现在对他有用?我用request.body 没用。【参考方案3】:

创建一个表单,将数据作为CharFieldTextField 类型的字段,并验证传递的数据。 Similar SO Question

【讨论】:

以上是关于如何在Django中接收JSON格式的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在Django中接收JSON格式的数据

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

57. Django 2.1.7 查询数据返回json格式

在视图中获取 JSON 请求(使用 Django)

[TimLinux] JavaScript AJAX接收到的数据转换为JSON格式

如何从 django 视图发送 json 并在 HTML 上接收它