Recently I had to setup a web app with simple one step user registration. After some searching I came accross a Django library called django-registration which seemed like the best way to implement user registration. It features single step and two step registration flows, some simple views and simple installation and configuration. In this blog post I’m going to go over the steps needed to implement user registration in a Django app.
I’m assuming a Django project has already been setup. It’s propably a good idea to create a new app for the user registration and authentication code. In the code examples I’m going to assume there’s an app called authentication which contains the user registration code.
First step is installing django-registration.
pip install django-registration
We’re going to be using a custom Django User model so we can later add fields to our User model without too much of a hassle. This isn’t strictly required so feel free to skip this step if you want.
Defining a custom User model in Django is done by subclassing AbstractUser. I’m going to be using email as username so I’ve modified the email field to be unique, set username to None and set USERNAME_FIELD to email.
from django.db import modelsfrom django.contrib.auth.models import AbstractUserclass User(AbstractUser):email = models.EmailField(unique=True)username = NoneUSERNAME_FIELD = 'email'REQUIRED_FIELDS = []
Next we will define our registration form which uses our custom User model.
from django_registration.forms import RegistrationFormfrom .models import Userclass UserForm(RegistrationForm):class Meta(RegistrationForm.Meta):model = User
And define update urls.py with the registration url.
from django.contrib import adminfrom django.urls import path, includefrom django_registration.backends.one_step.views import RegistrationViewfrom authentication.forms import UserFormurlpatterns = [path('admin/', admin.site.urls),path('register/',RegistrationView.as_view(form_class=UserForm),name='django_registration_register',),path('', include('django_registration.backends.one_step.urls')),path('', include('django.contrib.auth.urls')),]
In addition to the registration url we’re including the one step registration urls from djano-registration and the usual auth urls from Django.
Finally we need to create a template for rendering the registration form.
<!DOCTYPE html><html><meta charset="utf-8" /><head><title></title></head><body><form method="post">{% csrf_token %} {{form}}<input type="submit" value="Submit" /></form></body></html>
This template must be saved as django_registration/registration_form.html in order for it to be found by RegistrationView.
And that’s really it. Now you should be able to register a new user using just email and password from http://localhost:8000/register
A full example of using django registration can be found from my github