【问题标题】:Getting a JSON request in a view (using Django)在视图中获取 JSON 请求(使用 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 对象以便处理它?谢谢。

【问题讨论】:

    标签: python django json api


    【解决方案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_datastackoverflow.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')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-05
        • 2018-05-30
        • 2013-03-04
        • 2017-10-02
        • 2020-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多