User Registration with Forms
Django provides UserCreationForm for basic registration. You can extend it with additional fields like email, or create a completely custom registration form with validation. Always use create_user() to hash passwords.
20 min•By Priygop Team•Updated 2026
Registration Options
- UserCreationForm — Built-in form with username + password
- Extend UserCreationForm to add email, first_name, etc.
- Custom form with User.objects.create_user()
- Always validate unique usernames and emails
- Password validation: min length, common passwords, numeric-only
- Redirect to login page after successful registration
Registration Form
Registration Form
# accounts/forms.py
# from django import forms
# from django.contrib.auth.forms import UserCreationForm
# from django.contrib.auth.models import User
# class CustomRegistrationForm(UserCreationForm):
# email = forms.EmailField(required=True)
# first_name = forms.CharField(max_length=30)
# last_name = forms.CharField(max_length=30)
#
# class Meta:
# model = User
# fields = ['username', 'email', 'first_name', 'last_name', 'password1', 'password2']
#
# def clean_email(self):
# email = self.cleaned_data['email']
# if User.objects.filter(email=email).exists():
# raise forms.ValidationError('Email already registered.')
# return email
# accounts/views.py
# from django.contrib import messages
# from django.shortcuts import render, redirect
# def register(request):
# if request.method == 'POST':
# form = CustomRegistrationForm(request.POST)
# if form.is_valid():
# user = form.save()
# messages.success(request, 'Account created! You can now login.')
# return redirect('login')
# else:
# form = CustomRegistrationForm()
# return render(request, 'accounts/register.html', {'form': form})
# accounts/urls.py
# urlpatterns = [
# path('register/', views.register, name='register'),
# ]Tip
Tip
Use UserCreationForm for registration — it includes password validation, confirmation field, and secure hashing automatically.
Diagram
Loading diagram…
QuerySets are LAZY — no DB hit until evaluated.
Common Mistake
Warning
Building custom registration from scratch. Use UserCreationForm or django-allauth — they handle edge cases you'll miss.
Practice Task
Note
(1) Create a registration view with UserCreationForm. (2) Add email field. (3) Auto-login after registration.
Quick Quiz
Key Takeaways
- Django provides UserCreationForm for basic registration.
- UserCreationForm — Built-in form with username + password
- Extend UserCreationForm to add email, first_name, etc.
- Custom form with User.objects.create_user()