【问题标题】:Posting JSON to Django views with AJAX使用 AJAX 将 JSON 发布到 Django 视图
【发布时间】:2020-05-21 03:45:04
【问题描述】:

我正在尝试将 JSON 对象从我的客户端 Javascript 发布到我的 Django 视图。

我在尝试发布时收到“500(内部服务器错误)”。这是否与 CSRF 令牌有关?我该如何解决这个问题?

我的 AJAX

  $.ajax({
      type: 'POST',
      dataType: 'json',
      url: '/demo/saved/',
      data: {'data': JSON.stringify(finalSelection)},
      success: function() {
         console.log("Success")
      }
    });

views.py

def show(request):
    data = json.loads(request.POST.get('data', ''))
    context = {
        'data': data
    }
    return render(request, 'bill/saved.html', context )

urls.py

urlpatterns = [
    path('bill/', views.bill_view, name = 'bill-view'),
    path('saved/', views.show, name = 'selected-view'),
]

感谢任何帮助!

【问题讨论】:

    标签: javascript jquery django ajax django-views


    【解决方案1】:

    假设它确实是您提到的 CSRF 问题,因为您没有发布 500 错误输出,您可以简单地将 csrf 令牌添加到您在 POST 请求中发送的data

    $.ajax({
    ...
        data: {
            'data': JSON.stringify(finalSelection),
            'csrfmiddlewaretoken': '{{ csrf_token }}'
        },
    ...
    });
    

    【讨论】:

    • 感谢您的回答。但是当我这样做时,我得到一个 403 禁止错误。有什么想法吗?
    • @Bell 某事正在提高PermissionDenied。由于我在您的 show 视图中没有看到任何内容,因此您肯定还有其他内容没有分享。也许它有一个装饰器?或者你使用一些处理权限的中间件?
    猜你喜欢
    • 2015-10-16
    • 2011-12-06
    • 1970-01-01
    • 2013-08-24
    • 2012-04-15
    • 2013-11-09
    • 2014-06-07
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多