Форма регистрации не создает пользователя
Имеется страница с форма регистрации пользователя (базовая UserCreationForm без изменений). Она без проблем отображается, на ней нормально работает валидация полей. При отправке формы по нажатии на кнопку, никаких ошибок также нет. Но при этом новые пользователи не создаются. Просто форма отчищается, а страница с формой перезагружается. Кто знает, в чем может быть дело? Скрин страницы прилагаю.
P.s.: Возможно еще будет полезной информация о том, что я изменял модель AbstractUser, добавив туда еще 1 поле.
urls.py:
urlpatterns = [
path('apps', dashboard, name='dashboard'),
path('apps/<int:pk>', app, name='apps'),
path('app/<int:pk>', edit_app, name='app'),
path('register', register_user, name='register'),
]
views.py:
def register_user(request):
form = UserCreationForm()
if request.POST == 'POST':
if form.is_valid():
form.save()
context = {'form': form}
return render(request, 'app/register.html', context)
register.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Зарегистрироваться">
</form>
</body>
</html>
Функция представления описана не верно. Вы пытаетесь сохранить пустую форму. Неплохо бы было передать для начала данные из запроса, а потом их сохранять:
views.py:
def register_user(request):
# Если метод запроса POST
if request.method == 'POST':
# Берем данные с формы проверяем их
# если все в порядке сохраняем нового пользователя
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
# Авторизуем пользователя и переходим на главную страницу
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=password)
login(request, user)
return redirect('dashboard')
# Если что-то пошло не так отображаем форму
# с данными которые ввел пользователь для
# их исправления
context = {'form': form}
return render(request, 'app/register.html', context)
# При GET запросе отображаем пустую форму
context = {'form': UserCreationForm()}
return render(request, 'app/register.html', context)