我需要在 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 类(实际上我尝试了每个 [!] 位置),如本网站所述(问题/1785772)
#disable.py class DisableCSRF(object): def process_request(self, request): setattr(request, '_dont_enforce_csrf_checks', True)
我创建了一个 disable.py 并将其 disableCSRF 类添加到 MIDDLEWARE 类中(我再次尝试了每个位置),就像在此处的其他帖子中提到的: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. 中那样在源代码中注释掉某些东西。如果有中间件方式那就太好了。
提前致谢! :)
最佳答案
您可以在 View 函数上使用 @csrf_exempt 装饰器来禁用该 View 的 csrf。
参见documentation
关于python - 如何在代理后禁用 Django 的 CSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4791920/