Extending and customizing djangoallauth in Python (original) (raw)

Extending and customizing django-allauth in Python

Last Updated : 24 May, 2025

**Django-allauth is a powerful Django package that simplifies **user authentication, **registration, **account management, and **integration with social platforms like **Google, **Facebook, etc. It builds on Django’s built-in authentication system, providing a full suite of ready-to-use views and forms.

**Prerequisite: Django-allauth setup and Configuration

Features of Django allauth:

In this tutorial, we will set up a basic Django application that demonstrates how to use django-allauth for user authentication- covering login, logout, and signup functionality without using any custom templates.

Step 1: Create a Django Project and App

Create a new project and app, to learn about how to create and set it up, refer to:

Creating Django Project

Creating Django App

Suppose we created a project named **form and an app inside it, named **formapp.

Register formapp in **settings.py so Django knows to include it in the project:

Python `

INSTALLED_APPS = [ ...

'formapp',  # formapp registered here

]

`

Step 2: Install and Configure django-allauth

We install **django-allauth to extend Django's authentication system with features like **registration, **login, **logout, **email verification, and **social **login. It provides **prebuilt views and **forms so we don't have to implement them manually.

Install it using the command:

pip install django-allauth

Add required apps to INSTALLED_APPS

We now add required apps that power the core features of **django-allauth, including site management and social accounts.

Python `

INSTALLED_APPS = [ ... 'django.contrib.sites', # Required by allauth to manage sites 'allauth', # Core allauth functionality 'allauth.account', # User account management (signup/login) 'allauth.socialaccount', # For social login (optional) 'formapp', # Your app ]

`

Configure SITE_ID

This is needed for Django’s sites framework. Allauth uses this to differentiate between multiple domains. Since we’re using one site, we set:

SITE_ID = 1

Set up authentication backends

We need to tell Django to use both its default backend and the one provided by **allauth, add these codes in **settings.py:

Python `

AUTHENTICATION_BACKENDS = ( "django.contrib.auth.backends.ModelBackend", # Default auth "allauth.account.auth_backends.AuthenticationBackend", # Required by allauth )

`

Define redirect URLs after login/logout

These control where users are redirected after they **log **in or **log out:

Python `

LOGIN_REDIRECT_URL = '/' # Redirect after successful login ACCOUNT_LOGOUT_REDIRECT_URL = '/accounts/login/' # Redirect after logout

`

Customize account behavior

Here we define what fields are required and how authentication should behave:

Python `

ACCOUNT_EMAIL_REQUIRED = True # Email must be provided ACCOUNT_USERNAME_REQUIRED = True # Username is also required ACCOUNT_AUTHENTICATION_METHOD = 'username_email' # Users can log in using username or email ACCOUNT_EMAIL_VERIFICATION = 'none' # Skip email verification for simplicity

`

Ensure required middleware and context processors are present

**allauth needs access to the request object in templates. Add the following to **TEMPLATES:

'django.template.context_processors.request',

And include the **AccountMiddleware:

'allauth.account.middleware.AccountMiddleware',

Step 3: Create a Custom Signup Form

Sometimes you want to collect additional user data or change signup behavior. We do this by creating a form that extends **SignupForm.

Create the following inside **formapp/forms.py (make sure it is inside the app folder, not the project folder):

Python `

from allauth.account.forms import SignupForm from django import forms

class CustomSignupForm(SignupForm): first_name = forms.CharField(max_length=30, label='First Name') last_name = forms.CharField(max_length=30, label='Last Name')

def save(self, request):
    user = super().save(request)
    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']
    user.save()
    return user

`

Then, tell Django to use this form:

Python `

settings.py

ACCOUNT_FORMS = { 'signup': 'formapp.forms.CustomSignupForm', }

`

This replaces the default signup form with your custom one.

Step 4: Set Up URLs

django-allauth provides ready-made views like ****/login/, /signup/, /logout/**. To enable them, include its URLs in the project’s **urls.py:

Python `

form/urls.py

from django.contrib import admin from django.urls import path, include

urlpatterns = [ path('admin/', admin.site.urls), path('accounts/', include('allauth.urls')), ]

`

Now visiting ****/accounts/login/** or /accounts/signup/ will render the custom signup form (if defined), or the default form otherwise.

Step 5: Run the Server and Test

Migrate the database to create necessary tables:

python manage.py makemigrations

python manage.py migrate

Open your browser and visit:

**Outputs:

django13

Snapshot of the sign-up page

django14

Snapshot of the sign-in page

**Read Next Article: **Django Sign Up and login with confirmation Email