条件Django中间件(或如何排除管理系统)
我想在我网站的所有页面上使用我写的中间件(页面很多,所以我选择不使用装饰器,因为我想让代码在所有页面上都能用)。唯一的问题是,我不想在管理后台的代码上使用这个中间件,但它似乎在后台也在运行。
有没有办法让我在settings.py或urls.py中配置一下,或者在代码里做点什么,来阻止它在管理系统的页面上执行呢?
非常感谢任何帮助,
保罗
我想这么做的主要原因是我在中间件中使用了一个XML解析器,这导致非XML的下载出现了问题。我添加了一些额外的代码来检测代码是否是XML,并且不去解析那些不应该解析的内容。
对于其他中间件,如果这样做不方便,我可能会使用piquadrat上面提到的方法,或者干脆使用视图装饰器 - 谢谢你,piquadrat!
2 个回答
11
你可以在 process_request 这个方法里检查路径(还有你中间件里的其他 process_* 方法)。
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
42
一种通用的方法是(基于piquadrat的回答)
def process_request(self, request):
if request.path.startswith(reverse('admin:index')):
return None
# rest of method
这样,如果有人把 /admin/
改成 /django_admin/
,你仍然可以保证安全。