如何在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_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 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】:
创建一个表单,将数据作为CharField
或TextField
类型的字段,并验证传递的数据。 Similar SO Question
【讨论】:
以上是关于如何在Django中接收JSON格式的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 1.6 中使用 HTTP POST 请求接收 json 数据?