Performance: Registration with UserCreationForm
This affects the server response time and initial page load speed when rendering the registration form and processing user input.
Jump into concepts and practice - no test required
from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django.shortcuts import render, redirect class CustomUserCreationForm(UserCreationForm): class Meta: model = User fields = ('username', 'password1', 'password2') def register(request): if request.method == 'POST': form = CustomUserCreationForm(request.POST) if form.is_valid(): form.save() return redirect('login') else: form = CustomUserCreationForm() return render(request, 'register.html', {'form': form})
from django.contrib.auth.forms import UserCreationForm from django.shortcuts import render, redirect def register(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): form.save() return redirect('login') else: form = UserCreationForm() return render(request, 'register.html', {'form': form})
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Default UserCreationForm | More form fields rendered | Multiple reflows due to larger form | Higher paint cost due to more HTML | [X] Bad |
| CustomUserCreationForm with fewer fields | Fewer form fields rendered | Single reflow on initial load | Lower paint cost with smaller HTML | [OK] Good |
UserCreationForm?UserCreationForm in a Django view?from django.contrib.auth.forms import UserCreationForm. Other options import from wrong modules.UserCreationForm:
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
form = UserCreationForm()
return render(request, 'register.html', {'form': form})
What happens when a user submits the form with mismatched passwords?form.is_valid() is False, the view skips saving and redisplays the form with errors.UserCreationForm:
def register(request):
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
return render(request, 'register.html', {'form': form})UserCreationForm. Which approach correctly extends the form?save() to save the email to the user model before returning the user instance.