Использование 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.

Вернуться на верх