在视图中获取 JSON 请求(使用 Django)
Posted
技术标签:
【中文标题】在视图中获取 JSON 请求(使用 Django)【英文标题】:Getting a JSON request in a view (using Django) 【发布时间】:2011-11-14 04:23:40 【问题描述】:我正在尝试设置一个视图以接收来自 API 的 JSON 通知。我试图弄清楚如何获取 JSON 数据,我目前以此为起点来查看请求是否被正确接收:
def api_response(request):
print request
return HttpResponse('')
我知道 JSON 对象在那里,因为它在 print request
中显示:
META:'CONTENT_LENGTH': '178',
[Fri Sep 09 16:42:27 2011] [error] 'CONTENT_TYPE': 'application/json',
但是,POST 和 GET QueryDicts 都是空的。我将如何设置一个视图来接收 JSON 对象以便处理它?谢谢。
【问题讨论】:
【参考方案1】:我就是这样做的:
def api_response(request):
try:
data=json.loads(request.raw_post_data)
label=data['label']
url=data['url']
print label, url
except:
print 'nope'
return HttpResponse('')
【讨论】:
我要补充一点:如果这是您应用程序中的常见模式,请编写一个装饰器以应用于受影响的函数。 看起来它在 django 1.4 中更改为使用request.body
而不是 raw_post_data
。 ***.com/questions/1208067/…【参考方案2】:
对于使用 Django-Rest-Framework 构建的基于类的视图, 你可以使用内置的JSONParser来获取request.data中的JSON数据
from django.http import JsonResponse
from rest_framework.parsers import JSONParser
from rest_framework.views import APIView
class MyOveridingView(APIView):
parser_classes = [JSONParser]
class MyActualView(MyOveridingView):
def post(self, request, *args, **kwargs):
request_json = request.data
return JsonResponse(data=request_json, status=200)
【讨论】:
【参考方案3】:我将发布一个答案,因为这是我在谷歌上搜索我的问题时发现的第一件事。我正在使用香草 django 版本 3.2.9。在向视图发出带有 json 有效负载的发布请求后,我正在努力检索数据。找了一阵子,终于在request.body
找到了json。
注意:request.body
的类型为 bytes
,您必须将其解码为 utf-8、my_json_as_bytes.decode('utf-8')
【讨论】:
以上是关于在视图中获取 JSON 请求(使用 Django)的主要内容,如果未能解决你的问题,请参考以下文章
如何从中间件中的 Django 请求对象获取视图中使用的模型名称?
无法将 ajax json 发布请求发送到 django 视图