【发布时间】:2019-06-11 03:46:20
【问题描述】:
我试图在 Django 项目中包含一个中间件,但似乎 Django 没有执行该中间件。这个想法是在拥有应用管理员权限时模拟另一个用户帐户。
我的 settings.py 文件的 MIDDLEWARE 部分如下所示:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'mird_project.monitor.middleware.impersonateMiddleware.ImpersonateMiddleware',
]
中间件类如下所示:
from .models import Usuario
class ImpersonateMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
def process_request(self, request):
us_obj = Usuario.objects.all().filter(id_usuario=request.user.username).first()
tipo = us_obj.tipo.id_tipo
if tipo == "AD" and "__impersonate" in request.GET:
request.session['impersonate_id'] = request.GET["__impersonate"]
elif "__unimpersonate" in request.GET:
del request.session['impersonate_id']
if tipo == "AD" and 'impersonate_id' in request.session:
request.user = Usuario.objects.get(id_usuario=request.session['impersonate_id'])
return None
我在process_request 方法中插入了一个assert False, request,以便它会异常中止执行并向我显示包含的请求。它甚至从未被执行,所以我假设中间件永远不会被执行。它不会引发任何类型的错误,并且模拟机制只会在站点中显示相同的管理员用户。
任何想法为什么不调用中间件?
【问题讨论】:
-
你用的是什么版本的 Django?
-
我使用的是 Django 2.1
-
你确定路径是对的吗?如果是这样,您的
models.py在mird_project.monitor.middleware中,这将是不寻常的。
标签: django middleware