django csrf中间件无法禁用。我已经从我的项目的中间件中将其注释掉,但是由于缺少CSRF问题,导致登录失败。我正在使用Django主干。如果未在中间件中启用CSRF,如何引起问题?
我必须禁用它,因为CSRF刚刚中断了我站点上的许多POST请求。关于如何在django主干项目中完全禁用CSRF的任何反馈?
Django主干中的“新” CSRF框架也破坏了一个外部站点,该站点正在进入并在我为其提供的URL上执行POST(这是一个静态API的一部分。)我不能禁用CSRF框架,因为我之前说过,该如何解决?
请参阅下面的答案以获得更好的解决方案。自从我写这篇文章以来,发生了很多变化。现在有禁用CSRF的更好方法。
我感到你很痛苦。框架更改这种基本功能是不可接受的。即使我想从现在开始使用它,我在同一台计算机上的旧站点也共享django的副本。此类更改应要求对主要版本号进行修订。1.x->2.x。
无论如何,要修复它,我只是将其注释掉,并已停止频繁更新Django。
文件:django / middleware / csrf.py在第160行附近:
# check incoming token # request_csrf_token = request.POST.get('csrfmiddlewaretoken', None) # if request_csrf_token != csrf_token: # if cookie_is_new: # # probably a problem setting the CSRF cookie # return reject("CSRF cookie not set.") # else: # return reject("CSRF token missing or incorrect.")
是的,可以禁用Django csrf框架。
要手动将视图功能排除在任何CSRF中间件的处理之外,可以使用django.views.decorators.csrf模块中的csrf_exempt装饰器。例如:(请参阅doc)
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def my_view: return Httpresponse("hello world")
..,然后{% csrf_token %}从模板中删除表单内部,或者如果未将其包含在表单中,则保持其他内容不变。
{% csrf_token %}