Есть ли способ передать объект формы в методе аутентификации в django
Я пытаюсь передать объект формы в метод authenticate(), но он говорит, что нет атрибутов для имени пользователя и пароля. Есть ли конкретный способ аутентификации этой формы или нет. Я уже импортировал все из forms и auth.models
MY VIEWS.PY
def user_login(request):
if request.method == 'POST':
login_info = LoginForm(request.POST)
user = authenticate(username = login_info.username,
password=login_info.password)
if user:
login(request,user)
return HttpResponse(reversed('index'))
else:
return HttpResponse("Wrong")
else:
login_info = LoginForm()
return render(request,"login.html",{'logininfo':login_info})
MY FORMS.PY
class LoginForm(forms.Form):
username = forms.CharField(label = 'Your username')
password = forms.CharField(label= "Don't tell any but us",widget=forms.PasswordInput())
Есть ли другой путь
user = authenticate(username = login_info.username, password=login_info.password)
Данные в форме доступны через словарь cleaned_data
.
Таким образом, ваша строка аутентификации будет выглядеть следующим образом:
user = authenticate(username=login_info.cleaned_data['username'], password=login_info.cleaned_data['password'])
Однако cleaned_data
доступен только после валидации формы. Поэтому ваш код должен выглядеть следующим образом:
login_info = LoginForm(request.POST)
if login_info.is_valid():
user = authenticate(username=login_info.cleaned_data['username'], password=login_info.cleaned_data['password'])
# rest of the code
else:
return HttpResponse("Wrong") # or display the same form with the errors