我需要在Proxy后面运行Django系统(我们称其为Alfred)。两者都在同一网络上。作为代理,我使用yuri vandermeer的django-httpproxy。 (请参见他的页面yvandermeer.net)

两个系统都运行Django版本1.2.4

两个系统都在同一(封闭)网络中,并且在同一IP上。我的代理服务器在端口8000上运行,而Alfred在端口1337上运行。我需要使用他的/ admin站点登录到Alfred,该站点默认是Django附带的(并且已启用)。这是通过端口1337运行的,但是我需要通过端口8000进行访问。

当我尝试时,Alfred抛出403 CSRF错误,并告诉我,我有点像中间人(-和Alfred这么说是完全正确的)。

我尝试了几种方法来禁用Alfreds CSRF保护:


我在MIDDLEWARE_CLASSES的settings.py中注释了CsrfViewMiddleware
我创建了一个disable.py并将其disableCSRF类添加到MIDDLEWARE类中(实际上,我尝试过每个[!]位置),如本网站上所提到的那样(questions / 1785772)

#disable.py
class DisableCSRF(object):
    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)

我创建了一个disable.py并将其disableCSRF类添加到MIDDLEWARE CLASSES中(同样,我尝试了每个位置),如在此其他帖子中所述:http://hi.baidu.com/ledzep2/blog/item/e6b1612e21884c5c4ec2267a.html

#disable.py
class DisableCSRF(object):
    def process_view(self, request, callback, callback_args, callback_kwargs):
        setattr(request, '_dont_enforce_csrf_checks', True)

我试图在django / middleware / csrf.py中注释掉Csfr保护机制,但是我发现第190行附近的相关部分,而不是本网站中提到的第160行附近的问题:questions / 1650941 /


提到的任何事情都没有奏效。尝试通过/ admin登录时,总是出现403错误

如何在Alfred上禁用CSRF保护?是否可以仅针对/ admin禁用它?我希望我可以使用2和3.中提到的中间件来做到这一点,而不是像4中那样在源代码中注释掉某些东西。如果有中间件的话那会很棒。

提前致谢! :)

最佳答案

您可以在视图函数上使用@csrf_exempt装饰器为该视图禁用csrf。
请参见documentation

10-07 20:44