【问题标题】:Django CSRF on 500 error page with a form带有表单的 500 错误页面上的 Django CSRF
【发布时间】:2012-08-07 02:58:14
【问题描述】:

我得到一个包含表单的 500 错误页面,但是在抛出 500 错误页面时不会生成 CSRF 令牌。在 500 错误页面上生成 CSRF 令牌以使表单发布工作的最佳方法是什么?我应该只定义自己的自定义 500 错误视图吗?

【问题讨论】:

  • 产生错误的原因是什么?姜戈?你?你的服务器?
  • 假设 Django 抛出错误并呈现 500.html
  • 如果是这种情况,并且页面在设计上应该引发 500 服务器错误,您将需要找到产生错误的原因,捕获它并相应地处理它。
  • 定义一个视图和csrf-protect它怎么样?那没用?
  • @Chris 是的,我正在尝试定义一个自定义视图,但我正在努力寻找放置 handler500 = 'mysite.views.my_custom_error_view' 的地方,django 网站说把它放在 URLConf 但到底在哪里?

标签: django forms csrf


【解决方案1】:

好的,我尝试定义自定义 500 视图并且工作正常,对于遇到相同问题的任何人,方法如下:

定义一个自定义的 500 错误视图

from django.shortcuts import render

def server_error(request):
    vars = {}
    return render(request, '500.html', vars, status=500)

然后在主urls.py中添加:

handler500 = 'your_app.views.errors.server_error'

【讨论】:

  • 问题在于,当出现真正的问题时,响应会以 HTTP 状态码 200(成功)发送。当 AJAX 调用在实际失败时认为响应成功时,这让我感到很痛苦。将 status=500 添加到您的渲染调用中。
【解决方案2】:

你必须在 ajax 请求中传递令牌

                          var data = {
                            errorresponse: errorresponse,
                            'csrfmiddlewaretoken': '{{ csrf_token }}',
                            }
                                 
                            $.ajax({
                                type: "POST",
                                url: "/your-target-url/",  
                                data: data,  // this passes data context into view
                                success: function(data) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 2016-04-09
    • 2014-08-22
    • 1970-01-01
    • 2019-09-23
    相关资源
    最近更新 更多