Requisito previo: instalación y configuración de Django-allauth
Abordemos la personalización de los formularios de registro de django-allauth, interviniendo en el flujo de registro para agregar validaciones y procesos personalizados.
Ampliación del formulario de registro o adición de campos personalizados en django-allauth:
Una de las consultas más comunes sobre allauth es sobre cómo agregar campos adicionales o campos personalizados al formulario de registro. Puede ampliar la clase SignupForm desde allauth.account.forms. Todo lo que necesita hacer es crear una clase personalizada, pasar SignupForm a la clase personalizada, definir los campos personalizados y guardarlos. Es vital devolver el objeto de usuario, ya que se pasará a otros módulos para su validación. También debe incluir una variable en settings.py.
Veamos esto usando un ejemplo de forms.py.
Python3
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(CustomSignupForm, self).save(request) user.first_name = self.cleaned_data['first_name'] user.last_name = self.cleaned_data['last_name'] user.save() return user
En el fragmento anterior, CustomSignupForm se extiende a la clase que hereda todas las funciones de la clase SignupForm y agrega las funciones necesarias. Aquí, los campos personalizados con el nombre first_name y last_name se crean y guardan utilizando el módulo de registro en la misma clase.
El ACCOUNT_FORMS en settings.py para el código anterior es
Python3
ACCOUNT_FORMS = { 'signup': 'YourProject.forms.CustomSignupForm', }
Cualquier otro formulario personalizado creado se puede ampliar en ACCOUNT_FORMS. La lista se ilustra en la documentación .
Del mismo modo, LoginForm UserForm AddEmailForm y otros pueden ampliarse. No obstante, recuerda que al extender estos formularios y enlazarlos en settings.py. No olvide pasar el formulario original (por ejemplo , SignupForm ) como un parámetro para su clase y, a veces, es posible que deba manejar validaciones personalizadas y devolver usuarios o algún otro valor. Consulte el código fuente para seguir el flujo correcto.
Intervención del usuario y validaciones personalizadas:
Analicemos la adición de validaciones personalizadas y la intervención en el flujo de registro de usuarios. DefaultAccountAdapter es muy útil y, de hecho, se puede usar para resolver la mayoría de los problemas de personalización que un usuario puede encontrar al usar django – allauth .
Ejemplo #1: Lista restringida de correos electrónicos
Después de descubrir una forma de almacenar y recuperar la lista restringida, puede usar los adaptadores y generar errores de validación en el formulario de registro cuando un correo electrónico restringido intenta registrarse. Extienda un DefaultAccountAdapter y anule el método clean_email . Cree un adaptador.py en el directorio de su proyecto y amplíe la clase de adaptador predeterminada.
Python3
from allauth.account.adapter import DefaultAccountAdapter from django.forms import ValidationError class RestrictEmailAdapter(DefaultAccountAdapter): def clean_email(self, email): RestrictedList = ['Your restricted list goes here.'] if email in RestrictedList raise ValidationError('You are restricted from registering.\ Please contact admin.') return email
Finalmente, apunte el adaptador de cuenta en settings.py a su clase extendida.
ACCOUNT_ADAPTER='YourProject.adapter.RestrictEmailAdapter'
Ejemplo #2: Agregar una longitud máxima a un nombre de usuario
Como ACCOUNT_USERNAME_MAX_LENGTH no existe en la biblioteca allauth, DefaultAccountAdaptercan se usa para lograr esta función sin mucho dolor. Amplíe la clase DefaultAccountAdapter y anule el método clean_username . También debe hacer referencia a clean_username una vez más después de nuestra validación personalizada para completar otras validaciones integradas.
La última frase del párrafo anterior es la clave para trabajar con DefaultAccountAdapter . Nunca debe olvidar hacer referencia al nombre del módulo original para que el módulo complete otras validaciones.
Python3
from allauth.account.adapter import DefaultAccountAdapter from django.forms import ValidationError class UsernameMaxAdapter(DefaultAccountAdapter): def clean_username(self, username): if len(username) > 'Your Max Size': raise ValidationError('Please enter a username value\ less than the current one') # For other default validations. return DefaultAccountAdapter.clean_username(self, username)
Finalmente, apunta a la subclase en tu configuración.py
ACCOUNT_ADAPTER = 'YourProject.adapter.UsernameMaxAdapter'
Puede consultar el archivo adapters.py en el código fuente y ampliar otros módulos y agregar un proceso o cambiar su flujo. Los módulos como populate_username , clean_password (que se pueden personalizar para restringir las contraseñas de uso común) pueden tener el proceso personalizado y fluir sin tener que volver a escribirlos. DefaultAccountAdapter puede ser una herramienta potente si se usa en las circunstancias adecuadas para intervenir en el proceso predeterminado de allauth. allauth viene con una gran variedad de configuraciones integradas, y están aquí .
También puede descargar el código fuente completo desde el enlace en las referencias a continuación.
Referencias: subproceso de desbordamiento de pila
de documentación de django-allauth
en el ejemplo 1