Функция входа в систему в 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()