在视图中获取 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 视图

使用 angular $http 和 django urlpatterns 来获取 json 文件

在 Django 中获取请求正文作为字符串

将 JSON 数组从 Django 视图返回到模板

如何在 Django 中发出 json rpc 请求?