Django неверное имя пользователя, пароль для пользовательской модели - PullRequest
0 голосов
/ 15 апреля 2020

Я создал пользовательскую модель, используя 'OneToOneField'. Я создал систему регистрации и входа, но работает только регистрация, и я могу зарегистрировать нового пользователя, но, когда я пытаюсь войти в систему с использованием этого созданного пользователя, Django не позволяет мне войти в систему, показывая мое пользовательское сообщение «Имя пользователя или пароль неверный ». Я дважды проверил имя пользователя и пароль, и они верны, но Django не позволяет мне войти.

Вот мои коды.

models.py

class Vendor(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)
    phone_number = models.CharField(max_length = 12, blank = True)

forms.py

class SignInForm(forms.Form):
    username = forms.CharField(max_length = 20, widget = forms.TextInput(attrs = {'class': 'form-control', 'placeholder': 'Username'} ))
    password = forms.CharField(max_length = 15, widget = forms.PasswordInput(attrs = {'class': 'form-control', 'placeholder': 'Password'} ))

views.py

form = self.form(request.POST)
if form.is_valid():
    username = form.cleaned_data.get('username')
    password = form.cleaned_data.get('password')

    user = authenticate(username = username, password = password)
    if user:
        if user.is_active:
            login(request, user)
            return redirect('dashboard')
        else:
            messages.error(request, 'Your email address is not verified. Please verify it')
    else:
        messages.error(request, 'Username or password is wrong')

1 Ответ

0 голосов
/ 15 апреля 2020
form = LoginForm(request.POST or None)
context = {

    "form":form
}


if form.is_valid():
    print(form.cleaned_data)
    username = form.cleaned_data.get("username")
    password = form.cleaned_data.get("password")

    user = authenticate(request, username=username, password=password)

    if user is not None:
        print(request.user.is_authenticated)
        login(request, user)
        context['form'] = LoginForm()
        return redirect("/")
    else:
        print('Error')

return render(request, "MainApp/login.html", context)
  1. Вам необходимо добавить контекстный дикт для вашей формы
  2. Использовать условное is not None вместо if user
  3. Эта строка предназначена для удаления введенного ключа после того, как пользователь отправит форму context['form'] = LoginForm()

Я считаю, что это может быть решением вашей проблемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...