Я пытаюсь добавить сообщение во время процесса входа для пользователя, который имеет учетную запись, но деактивирован, что он должен активировать ее, если он хочет войти.
Я использую контроллер LoginView,который использует встроенную стандартную форму с именем AuthenticationForm
AuthenticationForm имеет следующий метод:
def confirm_login_allowed(self, user):
"""
Controls whether the given User may log in. This is a policy setting,
independent of end-user authentication. This default behavior is to
allow login by active users, and reject login by inactive users.
If the given user cannot log in, this method should raise a
``forms.ValidationError``.
If the given user may log in, this method should return None.
"""
if not user.is_active:
raise forms.ValidationError(
self.error_messages['inactive'],
code='inactive',
# and list of error messages within this class
error_messages = {
'invalid_login': _(
"Please enter a correct %(username)s and password. Note that both "
"fields may be case-sensitive."
),
'inactive': _("This account is inactive."),
}
Так что технически, если не user.is_active - он должен показывать сообщение «неактивно», но в моем случаедля инактивированных пользователей с таблицей is_active = False DB вместо этого выводится сообщение «invalid_login».Я пытаюсь на 100% правильно ввести логин и пароль, и пользователь не активен, но он показывает мне сообщение «invalid_login».Затем я просто включаю флаг is_active в БД в True, и это позволяет мне легко войти.У вас есть идея, почему это может быть?
Конечная цель - показать это сообщение «'неактивен": _ ("Эта учетная запись неактивна.") Пользователю, у которого есть учетная запись, но деактивированная.(или пользовательское сообщение) Технически это должно работать, но это не так.Заранее спасибо и извините, если вы нашли этот вопрос элементарным или немым.
Попытка:
class AuthCustomForm(AuthenticationForm):
def clean(self):
AuthenticationForm.clean(self)
user = ExtraUser.objects.get(username=self.cleaned_data.get('username'))
if not user.is_active and user:
messages.warning(self.request, 'Please Activate your account',
extra_tags="", fail_silently=True)
# return HttpResponseRedirect(' your url'))
И наконец, что помогло:
class AuthCustomForm(AuthenticationForm):
def get_invalid_login_error(self):
user = ExtraUser.objects.get(username=self.cleaned_data.get('username'))
if not user.is_active and user:
raise forms.ValidationError(
self.error_messages['inactive'],
code='inactive',)
else:
return forms.ValidationError(
self.error_messages['invalid_login'],
code='invalid_login',
params={'username': self.username_field.verbose_name},
)
Это своего родастранный способ сделать это так, как должен был бы работать встроенный код DJANGO.Я не уверен, что не исправил свою ошибку, допущенную ранее здесь.возможно, я сделал вещи еще хуже.