Я пытаюсь включить промежуточное ПО в проект Django, но кажется, что промежуточное ПО не выполняется Django. Идея состоит в том, чтобы выдавать себя за другую учетную запись пользователя, если у него есть права администратора приложения.
Секция MIDDLEWARE моего файла settings.py выглядит так:
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
Я вставил assert False, request
в метод process_request
, чтобы он мог прервать выполнение с исключением и показать, что содержится в запросе. Он даже не был выполнен, поэтому я предполагаю, что промежуточное программное обеспечение никогда не будет выполнено. Он не выдает никаких ошибок, а механизм олицетворения просто отображает на сайте того же пользователя-администратора.
Есть идеи, почему не вызывается промежуточное программное обеспечение?