Python 为什么Django管理员登录给我403 CSRF错误?

Python 为什么Django管理员登录给我403 CSRF错误?,python,django,csrf,django-csrf,Python,Django,Csrf,Django Csrf,我正在运行Django 1.2.2,尝试登录Django管理员时出现以下错误: 禁止(403)CSRF验证 失败。请求被中止 失败原因: 没有CSRF或会话cookie **我没有对barebones管理员进行定制,当我检查源代码时,在我认为正确的位置有一个CSRF令牌 当我查看正在发送的实际请求时,有一个csrf令牌正在发送,但Django仍然说csrf验证失败 谁能给我指出正确的方向吗?为什么会发生这种情况?1)您的设置.中间件类中是否有'django.middleware.csrf.Csr

我正在运行Django 1.2.2,尝试登录Django管理员时出现以下错误:

禁止(403)CSRF验证 失败。请求被中止

失败原因:

没有CSRF或会话cookie

**我没有对barebones管理员进行定制,当我检查源代码时,在我认为正确的位置有一个CSRF令牌

当我查看正在发送的实际请求时,有一个csrf令牌正在发送,但Django仍然说csrf验证失败

谁能给我指出正确的方向吗?为什么会发生这种情况?

1)您的
设置.中间件类中是否有
'django.middleware.csrf.CsrfViewMiddleware'

2) 你确定你一直使用1.2.2吗?昨天晚上才出来的

根据,不仅需要csrf隐藏表单字段,还需要
csrftoken
cookie。您提供的错误消息还表明缺少cookie


我会查看您浏览器的cookies,以确保
csrftoken
cookie存在。

我在Django 1.2.1 FINAL上也遇到过同样的问题。因为我知道我们生产站点上的Django永远不会从1.0更新(出于各种原因),所以我找到了一个解决方案,并将其应用到我的开发版本settings.py中,使production settings.py保持不变

使用以下代码在应用程序目录中创建middleware.py文件:

class disableCSRF:
    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)
        return None
然后在settings.py的开发版本中,将其插入到中间件类中:

'your_app_name.middleware.disableCSRF',
也许不是最安全的解决方案,但我们的Django站点是严格的内部站点,因此任何类型的恶意操作的风险都是最低的。这个解决方案很简单,不涉及对模板/视图的更改,而且它可以立即工作(与我尝试过的其他解决方案不同)

希望有人在类似的情况下,我会发现这是有用的


这要归功于约翰·麦科勒姆,我在他身上找到了这个。

Django 1.2.2不是昨天发布的吗?是的,我修改了我的问题。我今天删除并重新安装了Django。但在做那件事之前,我发现了错误。我以前使用过1.2.1。是的,我的中间件类中有它。事实上,我想我一直在运行1.2.1,直到今天早上我完全重新安装它。很好。如果我检查Charles中的请求,我可以看到请求中有csrfmiddlewaretoken。因此,如果正在生成令牌,CSRF将起作用。但是为什么在提交表单时它看不到令牌呢?我最终发现我只是在Firefox中遇到了这个错误。为了纠正这个问题,我进入了我的firefox cookie,并删除了django站点的所有cookie。一旦浏览器为站点提供了一个新的csrf cookie,它就可以正常工作了。一定是一个过时的cookie或什么的…我有这个问题再次与同一个网站。我上面提到的解决方案这次不起作用。Django现在甚至没有生成CSRF cookie。你的意思是在这里说“project”而不是“app”吗?当我尝试此解决方案时,它只是在管理员登录时给我一个错误:“看起来你的浏览器没有配置为接受cookie。请启用cookie,重新加载此页面,然后重试。”我不得不使用此方法。出于某种原因,我工作的服务器正在清理cookies。我们认为这是由于空格,但它仍然抛出错误。谢谢你提供了这个很酷的解决方案!