Функция входа в систему в Django не работает должным образом

views.py

def login_view(request):
    form = AuthenticationForm()
    if request.method == 'POST':
        form = AuthenticationForm(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 is not None:
                login(request,user)
                messages.info(request,'登入成功!')
                return redirect('index')
            else:
                messages.error(request,'帳戶無效或密碼錯誤! 請重試!')
        else:
            messages.error(request,'帳戶無效或密碼錯誤! 請重試!')
    context = {'form':form}
    return render(request,'customer/login.html',context)

login.html

<form method="POST" action="" style="position:absolute;top:300px;left:125px;">
        {% csrf_token %} 
        {{ form.username|as_crispy_field }}<br>
        {{ form.password|as_crispy_field }}<br>
        <button class="btn btn-primary" type="submit">登入</button>
</form>

Для функции входа в Django я пытаюсь использовать имя пользователя и пароль, основанные на модели User в django.contrib.auth.models для входа в учетную запись. Однако, несмотря на то, что я использую свой статус суперпользователя для входа, появляется сообщение об ошибке, показывающее, что неверное имя пользователя или пароль. Могу ли я спросить, следует ли AuthenticationForm информации модели User для аутентификации пользователя или я что-то упускаю?

Вам необходимо предоставить атрибут 'data' для AuthenticationForm. Попробуйте сделать следующее:

def login_view(request):
    form = AuthenticationForm()
    if request.method == 'POST':
        form = AuthenticationForm(request, data=request.POST)
        if form.is_valid():
            login(request, form.get_user())
            messages.info(request,'登入成功!')
            return redirect('index')
        else:
            messages.error(request,'帳戶無效或密碼錯誤! 請重試!')
    context = {'form':form}
    return render(request,'customer/login.html',context)
<<<Форма AuthenticationForm уже выполняет аутентификацию за вас, поэтому нет необходимости снова запускать функцию

в вашем коде. Вы можете получить объект пользователя для входа в систему, используя authenticate, если форма действительна.form.get_user()

Вернуться на верх