Django сообщает о недействительной форме с методом запроса POST
Я отображаю html при входе в систему по url, а затем вызываю другой url для обработки отправленной формы.
Далее следует метод, который обрабатывает форму -
def process_loginform(request):
print(request.method)
form = LoginForm(request.POST)
if form.is_valid():
print("Valid form")
else:
print("Invalid form")
return HttpResponseRedirect("/login/welcome/")
Форма входа в систему html -
{% extends 'base.html' %}
{% block content %}
Hello
<form action="/login/process_loginform/" method="post">
{% csrf_token %}
<label for="username">Username</label>
<input id="username-val" type="text" name="username-name" />
<label for="password">Password</label>
<input id="password-val" type="password" name="password-name" />
<input type="submit" value="Login" />
</form>
{% endblock %}
forms.py -
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(label="username", max_length=64)
password = forms.CharField(label="username", max_length=64)
Вывод консоли -
(ubuntu-7Wf190Ea) ubuntu@ip-172-31-4-242:~/ka$ ./manage.py runserver 0.0.0.0:1890
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
February 14, 2024 - 10:28:18
Django version 4.2.10, using settings 'ibs.settings'
Starting development server at http://0.0.0.0:1890/
Quit the server with CONTROL-C.
[14/Feb/2024 10:28:23] "GET /login/ HTTP/1.1" 200 729
request: <WSGIRequest: POST '/login/process_loginform/'>
POST
**Invalid form**
Я следую этой документации - https://docs.djangoproject.com/en/5.0/topics/forms/
Почему форма недействительна?
Я пытался найти ошибку в гугле, но не получилось. Я ожидал понять, почему мой обработчик логина сообщает о недействительной форме.
Спасибо
Потому что названия ваших полей неверны.
Ваш LoginForm
имеет 2 поля с именами username
и password
. Просто используйте эти имена.
Форма входа в систему html:
{% extends 'base.html' %}
{% block content %}
Hello
<form action="/login/process_loginform/" method="post">
{% csrf_token %}
<label for="username">Username
<input id="id_username" type="text" name="username" />
<label for="password">Password
<input id="id_password" type="password" name="password" />
<input type="submit" value="Login" />
</form>
{% endblock %}
Дополнительная информация: