Ответ 1
Try:
form = AuthenticationForm(data=request.POST)
Я пытаюсь использовать форму AuthenticationForm с django и выяснять, что я не могу получить форму для проверки. Я пропустил это до простого теста (при условии, что это правильно), который, похоже, не работает. Может ли кто-нибудь увидеть проблему здесь?
>>> from django.contrib.auth.forms import AuthenticationForm
>>> POST = { 'username': 'test', 'password': 'me', }
>>> form = AuthenticationForm(POST)
>>> form.is_valid()
False
Есть ли настоящая причина, по которой он не будет проверяться? Я использую его неправильно? Я в основном смоделировал его после собственного входа в систему django.
Try:
form = AuthenticationForm(data=request.POST)
После нескольких часов проведенного поиска "Почему в хаке нет ошибки проверки?" Я столкнулся с этой страницей: http://www.janosgyerik.com/django-authenticationform-gotchas/
Первый аргумент аутентификацииForm не данных! на всех:
def __init__(self, request=None, *args, **kwargs):
Итак, поэтому вам нужно передать req.POST данные или передать что-то еще в первом аргументе. В одном из ответов здесь уже сказано:
AuthenticationForm(data=req.POST)
Вы также можете использовать один из них:
AuthenticationForm(req,req.POST)
AuthenticationForm(None,req.POST)
Код функции is_valid:
return self.is_bound and not bool(self.errors)
>>> form.errors
{'__all__': [u'Please enter a correct username and password. Note that both fields are case-sensitive.']}
Если вы видите, что код метода очищен от AuthenticationForm
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if username and password:
self.user_cache = authenticate(username=username, password=password)
if self.user_cache is None:
raise forms.ValidationError(_("Please enter a correct username and password. Note that both fields are case-sensitive."))
elif not self.user_cache.is_active:
raise forms.ValidationError(_("This account is inactive."))
self.check_for_test_cookie()
return self.cleaned_data
"Проблема" заключается в том, что не выходит пользователь с этим именем пользователя и passowrd