Использование Default UserCreationForm не выдает ошибку при несовпадении паролей
Использование Default UserCreationForm из django.contrib.auth.forms не показывает ошибку, если пароли не совпадают. Я не хочу создавать пользовательскую модель.
Вот код из моего файла views.py
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render
# Create your views here.
def register(response):
if response.method == "POST":
print(response.POST)
form = UserCreationForm(response.POST)
if form.is_valid():
form.save()
else:
print(form.errors)
form = UserCreationForm()
return render(response,"register/register.html",{"form":form})
код register.html
<html>
<head>
<title>Register </title>
</head>
<body>
<h1>This is the Registration page</h1>
<form method="post">
{% csrf_token %}
{{form.as_p}}
<button type="submit">Submit</button>
</form>
</body>
</html>
Я думал, что сообщение будет отображаться автоматически. Я что-то упустил? Edit: Ни одно из сообщений об ошибках не отображается, например, длина пароля < 8, все числовые пароли и т.д.
Вы каждый раз создаете новую форму, вы должны выводить ту, которая недействительна:
from django.shortcuts import redirect
def register(response):
if response.method == 'POST':
form = UserCreationForm(response.POST)
if form.is_valid():
form.save()
return redirect('name-of-some-view')
else:
form = UserCreationForm() # 🖘 only for a GET request
return render(response, 'register/register.html', {'form': form})
Note: In case of a successful POST request, you should make a
redirect
[Django-doc] to implement the Post/Redirect/Get pattern [wiki]. This avoids that you make the same POST request when the user refreshes the browser.