Почему у объекта 'function' не отображается атрибут 'user'?
я попытался создать 2 пользователей в моем проекте
models.py
class CustomUser(AbstractUser):
user_type_choices = ((1, "Admin"), (2, "NotesUser"))
user_type = models.CharField(max_length=10, choices=user_type_choices, default=1)
class Admin(models.Model):
user_id = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
class NotesUser(models.Model):
user_id = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
@receiver(post_save, sender=CustomUser)
def create_user_profile(sender, created, instance, **kwargs):
if created:
if instance.user_type == 1:
Admin.objects.create(user_id=instance)
if instance.user_type == 2:
NotesUser.objects.create(user_id=instance)
@receiver(post_save, sender=CustomUser)
def save_user_profile(sender, instance, **kwargs):
if instance.user_type == 1:
instance.admin.save()
if instance.user_type == 2:
instance.notesuser.save()
и я написал это промежуточное ПО для проверки доступа пользователей
LoginCheckMiddleWare.py
from django.utils.deprecation import MiddlewareMixin
from django.urls import reverse
from django.http import HttpResponseRedirect, HttpResponse
class LoginCheckMiddleWare(MiddlewareMixin):
def process_view(self, view_func, request, view_args, view_kwargs):
modulename=view_func.__module__
user = request.user
if user.is_authenticated:
if user.user_type == "1":
if modulename == "todo_app.views" or modulename == "todo_app.AdminViews":
pass
else:
return HttpResponseRedirect(reverse("admin_home"))
elif user.user_type == "2":
if modulename == "todo_app.UserViews" or modulename == "todo_app.views":
pass
else:
return HttpResponseRedirect(reverse("user_home"))
else:
pass
#return HttpResponseRedirect(reverse("log_in"))
else:
if request.path == reverse("log_in") or request.path == reverse("login_save") or modulename == "django.contrib.auth.views" or modulename == "todo_app.views":
pass
else:
return HttpResponseRedirect(reverse("log_in"))
я упомянул промежуточное ПО, которое я создал в app, в файле settings.py
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',
'todo_app.LoginCheckMiddleWare.LoginCheckMiddleWare',
]
но при попытке зайти на страницу входа в систему появляется ошибка
'function' object has no attribute 'user'
может ли кто-нибудь помочь мне?
Согласно документации первым параметром представления процесса является объект запроса, пожалуйста, измените функцию следующим образом:
def process_view(self, request, view_func, view_args, view_kwargs)