This tutorial covers how to set up a custom user model and forms for user management in Django, including creating a custom user model, a signup form, a login form, and views for signup, login, and logout.
This tutorial covers how to set up a custom user model and forms for user management in Django, including creating a custom user model, a signup form, a login form, and views for signup, login, and logout.
Django provides several built-in authentication views and forms that make it easy to handle user authentication. In this tutorial, we will walk through the steps of setting up user authentication in Django using the built-in authentication views and forms.
First, let's create a new Django project using the following command:
$ django-admin startproject myproject
Next, navigate to the project directory and create a new Django app:
$ cd myproject $ python manage.py startapp myapp
To set up the Django user model, we need to add the auth
and users
apps to the INSTALLED_APPS
list in the settings.py
file:
INSTALLED_APPS = [
...
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp.users',
]
Then, run the following command to create the necessary database migrations:
$ python manage.py makemigrations
$ python manage.py migrate
By default, Django uses a User
model provided by the auth
app to store user information. However, we can create a custom user model by subclassing AbstractUser
and setting the AUTH_USER_MODEL
setting in the settings.py
file:
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
AUTH_USER_MODEL = 'myapp.User'
To create a signup form, we need to create a form class that inherits from UserCreationForm
and overrides the email
field to make it required:
from django import forms
from django.contrib.auth.forms import UserCreationForm
class SignupForm(UserCreationForm):
email = forms.EmailField(max_length=254, required=True, help_text='Required. Enter a valid email address.')
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
To create a login form, we need to create a form class that inherits from AuthenticationForm
:
from django.contrib.auth.forms import AuthenticationForm
class LoginForm(AuthenticationForm):
pass
SignupForm
form class and the signup
template:from django.shortcuts import render
def signup(request):
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
else:
form = SignupForm()
return render(request, 'myapp/signup.html', {'form': form})
To create a login view, we need to create a view function that uses the LoginForm
form class and the login
template:
def login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
return redirect('home')
else:
form = LoginForm()
return render(request, 'myapp/login.html', {'form': form})
To create a logout view, we can use the built-in logout
view provided by Django:
from django.contrib.auth import logout
def logout_view(request):
logout(request)
return redirect('login')
Next, we need to create the templates for the signup, login, and logout views.
First, let's create the signup.html
template:
{% extends 'base.html' %}
{% block content %}
<h2>Sign up</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-primary">Sign up</button>
</form>
{% endblock %}
Next, let's create the login.html
template:
{% extends 'base.html' %}
{% block content %}
<h2>Log in</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-primary">Log in</button>
</form>
{% endblock %}
Finally, let's create a logout.html
template:
{% extends 'base.html' %}
{% block content %}
<h2>You have been logged out.</h2>
{% endblock %}
Finally, we need to add URL patterns for the signup, login, and logout views in the urls.py
file:f
rom django.urls import path
from . import views
urlpatterns = [
path('signup/', views.signup, name='signup'),
path('login/', views.login, name='login'),
path('logout/', views.logout_view, name='logout'),
]
Conclusion:
In this tutorial, we walked through the steps of setting up user authentication in Django using the built-in authentication views and forms. We created custom user and authentication forms, and defined view functions for signup, login, and logout. We also created templates for each of these views and added the corresponding URL patterns.
With these steps, you should now have a basic user authentication system set up in your Django project. You can further customize the system by adding additional fields to the user model, adding password reset functionality, and implementing other authentication methods such as social media login.
DigitalOcean Sign Up : If you don't have a DigitalOcean account yet, you can sign up using the link below and receive $200 credit for 60 days to get started: Start your free trial with a $200 credit for 60 days link below: Get $200 free credit on DigitalOcean ( Note: This is a referral link, meaning both you and I will get credit.)
👩💻🔍 Explore Python, Django, Django-Rest, PySpark, web 🌐 & big data 📊. Enjoy coding! 🚀📚