Я хочу использовать встроенный в Djangos LoginView
. Он работает нормально, пока я не войду в систему с правильным паролем (если пароль неправильный, он работает). Тогда я получаю эту ошибку:
'AnonymousUser' object has no attribute '_meta'
Я уже добавил AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']
в свой файл settings.py и посмотрел на Вход в Django AttributeError: У объекта AnonymousUser нет атрибута _meta и на других веб-страницах, но они не могли мне помочь.
MIDDLEWARE = [
# Must have middlewares
'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',
'simple_history.middleware.HistoryRequestMiddleware',
'admin_reorder.middleware.ModelAdminReorder',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
# Custom middlewares
'utils.Middleware.RangesMiddleware.RangesMiddleware',
'utils.Middleware.AdminAccessMiddleware.AdminAccessMiddleware',
'apps.log_request.middlewares.RequestLogMiddleware',
]
.
Internal Server Error: /auth/anmelden
Traceback (most recent call last):
File "C:\Program Files\Python37\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Program Files\Python37\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Program Files\Python37\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\views\decorators\debug.py", line 76, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\utils\decorators.py", line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper
return bound_method(*args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\contrib\auth\views.py", line 61, in dispatch
return super().dispatch(request, *args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "C:\Program Files\Python37\lib\site-packages\django\views\generic\edit.py", line 142, in post
return self.form_valid(form)
File "C:\Program Files\Python37\lib\site-packages\django\contrib\auth\views.py", line 90, in form_valid
auth_login(self.request, form.get_user())
File "C:\Program Files\Python37\lib\site-packages\django\contrib\auth\__init__.py", line 126, in login
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
File "C:\Program Files\Python37\lib\site-packages\django\utils\functional.py", line 257, in inner
return func(self._wrapped, *args)
AttributeError: 'AnonymousUser' object has no attribute '_meta'
[05/Jun/2019 21:25:28] "POST /auth/anmelden HTTP/1.1" 500 159900
Эта ошибка возникает на \django\utils\decorators.py
в строке 142 (response = view_func(request, *args, **kwargs)
) (я использовал PyCharm для отладки). Мой middleware
: <django.middleware.csrf.CsrfViewMiddleware object at 0x000002105D119470>
, а мой view_func
functools.partial(<bound method LoginView.dispatch of <django.contrib.auth.views.LoginView object at 0x000002105F768C50>>)
.
Мой путь в моем urls.py:
path('anmelden', LoginView.as_view(
template_name="authenticate/login.html",
authentication_form=SignInForm,
extra_context={
"selected": "authenticate",
"title": title_suffix("Anmelden", Config.verbose_name),
},
), name="login"),
Моя clean
функция в моем SignInForm
:
def clean(self):
User.remove_expired_user()
cleaned_data = self.cleaned_data # That's the error. I had to use self.clean()!!!!
username = cleaned_data.get("username")
password = cleaned_data.get("password")
if "@" in username:
try:
username = User.objects.get(email__iexact=username).username
except ObjectDoesNotExist:
raise forms.ValidationError("Diese E-Mail-Adresse wurde nicht gefunden")
else:
try:
username = User.objects.get(username=username).username
except ObjectDoesNotExist:
raise forms.ValidationError("Dieser Benutzername wurde nicht gefunden")
user = authenticate(username=username, password=password)
if user is None:
try:
us = User.objects.get(username=username)
except ObjectDoesNotExist:
pass
else:
if us.check_password(password) and not us.is_active:
raise forms.ValidationError("Dieser Account ist deaktiviert. Du kannst ihn über deine E-Mail aktivieren.")
raise forms.ValidationError("Falsches Passwort")
return cleaned_data
Я НАШЕЛ ОШИБКУ:
В моей функции clean
я использовал self.cleaned_data
вместо self.clean()
.