Prerequisite: Django-allauth setup and Configuration
Let’s deal with customizing django-allauth signup forms, intervening in registration flow to add custom process and validations.
Extending Signup Form or adding custom fields in django-allauth:
One of the most common queries about
allauth is about adding additional fields or custom fields to the signup form. You can extend the
SignupForm class from
allauth.account.forms. All you need to do is create a custom class pass the
SignupForm to the custom class and define the custom fields and save it. It’s vital to return the
user object as it will be passed to other modules for validations. You also need to include a variable in
Let’s see this using an example
In the above snippet
CustomSignupForm is extended the class which inherits all the features of
SignupForm class and adds the necessary features. Here custom fields by the name
last_name are created and saved in using the
signup module in the same class.
settings.py for the above code is
Any other custom forms created can be extended in
ACCOUNT_FORMS. The list is illustrated in the documentation.
AddEmailForm and others can be extended. However, remember that when you extend these forms and link them in
settings.py. Don’t forget to pass the original form (For example
SignupForm) as a parameter to your class and sometimes you might have to handle custom validations and return user or some other value. Please refer to the source code to follow the correct flow.
User Intervention and Custom validations:
Let’s discuss adding custom validations and intervening in the user registration flow.
DefaultAccountAdapter is very useful and indeed can be used to solve most of the customization problems that a user might encounter while using
Example #1: Restricted List of email’s
After figuring out a way to store and fetch the restricted list, you can use the adapters and raise validation error in the registration form when a restricted email tries to register. Extend a
DefaultAccountAdapter and override the
clean_email method. Create an
adapter.py in your project directory and extend the default adapter class.
Finally, point the account adapter in
settings.py to your extended class.
ACCOUNT_ADAPTER = 'YourProject.adapter.RestrictEmailAdapter'
Example #2: Add a Maximum length to a username
ACCOUNT_USERNAME_MAX_LENGTH doesn’t exist in the allauth library,
DefaultAccountAdaptercan be used to achieve this feature without much pain. Extend the
DefaultAccountAdapterclass and overriding the
clean_username method. You need to also reference the
clean_username once again after our custom validation to complete other inbuilt validations.
The Last sentence in the above paragraph is the key to work with
DefaultAccountAdapter. You should never forget to reference the original module name for the module to complete other validations.
Finally, point to the subclass in your
ACCOUNT_ADAPTER = 'YourProject.adapter.UsernameMaxAdapter'
You can refer to
adapters.py file in the source code and extend other modules and add a process or change their flow. The modules such as
clean_password (which can be customized to restrict commonly used passwords) can have the custom process and flow without rewriting them.
DefaultAccountAdapter can be a potent tool if used in right circumstances to intervene in allauth’s default process.
allauth comes with a vast variety inbuilt settings, and they are here. You can also download the entire source code from the link in the references below.
- Extending a list in Python (5 different ways)
- Reusable piece of python functionality for wrapping arbitrary blocks of code : Python Context Managers
- Python - Read blob object in python using wand library
- MySQL-Connector-Python module in Python
- Reading Python File-Like Objects from C | Python
- Python | Index of Non-Zero elements in Python list
- twitter-text-python (ttp) module - Python
- Important differences between Python 2.x and Python 3.x with examples
- Python | Merge Python key values to list
- Python | PRAW - Python Reddit API Wrapper
- Python | Convert list to Python array
- Python | Set 4 (Dictionary, Keywords in Python)
- Python | Add Logging to a Python Script
- Python | Sort Python Dictionaries by Key or Value
- Python | Add Logging to Python Libraries
- Python | Visualizing O(n) using Python
- max() and min() in Python
- gcd() in Python
- Python PIP
Improved By : Akanksha_Rai