我想使用我在整个网站上编写的一些中间件(大量的页面,因此我选择不使用装饰器,因为我想使用所有页面的代码)。唯一的问题是我不想将中间件用于管理代码,而且它似乎对它们有效。
有没有办法可以配置settings.py或urls.py,或者代码中有什么东西可以防止它在管理系统的页面上执行?
任何帮助非常感谢,
干杯
保
答案 0 :(得分:27)
一般方法(基于piquadrat的回答)
def process_request(self, request):
if request.path.startswith(reverse('admin:index')):
return None
# rest of method
这样,如果有人将/admin/
更改为/django_admin/
,您仍然可以获得保障。
答案 1 :(得分:6)
您可以检查process_request中的路径(以及中间件中的任何其他进程_ * - 方法)
def process_request(self, request):
if request.path.startswith('/admin/'):
return None
# rest of method
def process_response(self, request, response):
if request.path.startswith('/admin/'):
return response
# rest of method
答案 2 :(得分:0)
我想要这样做的主要原因是在中间件中使用XML解析器,这会破坏非XML下载。我已经添加了一些额外的代码来检测代码是否是XML,而不是试图解析它不应该解决的任何问题。
对于其他不太方便的中间件,我可能会使用上面的piquadrat方法概述,或者只是使用视图装饰器 - 干杯piquadrat!