NOTA: Este artículo fue publicado inicialmente en mi Substack, en https://andresalvareziglesias.substack.com/
Este es el último capítulo de esta serie de publicaciones de Django AllAuth. En estos cinco capítulos hemos descubierto una pequeña maravilla, un componente Django realmente útil para manejar todas nuestras necesidades de autenticación. En este capítulo aprenderemos cómo ampliar el modelo de usuario básico de Django para agregar campos personalizados.
AllAuth utiliza el modelo de usuario estándar de Django, además de algunas tablas adicionales para manejar el inicio de sesión social y los tokens de inicio de sesión. En Django 5, el modelo de usuario se encuentra en el paquete django.contrib.auth y tiene un montón de campos predefinidos, como se puede leer en el documento oficial:
A veces, esto no es suficiente para nuestro proyecto. Django te permite crear tablas de usuarios y administradores de usuarios personalizados, para manejar las necesidades de cada proyecto.
Vamos a crear una tabla de usuarios personalizada y un administrador de usuarios personalizado para manejar nuestros procesos de inicio de sesión y registro.
Abre models.py en nuestro proyecto de muestra y escribe un código como este:
class MyCustomUser(AbstractBaseUser): email = models.EmailField(unique=True) first_name = models.CharField(max_length=30, blank=True) last_name = models.CharField(max_length=30, blank=True) is_active = models.BooleanField(default=True) is_admin = models.BooleanField(default=False) timezone = models.CharField(max_length=30, default='UTC') is_custom = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) objects = MyCustomUserManager() USERNAME_FIELD = 'email' EMAIL_FIELD = 'email' def __str__(self): return self.email def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True @property def is_utc(self): return self.timezone == 'UTC'
Podemos definir un nuevo modelo de Usuario que se extienda desde el modelo AbstractBaseUser de Django. En este nuevo modelo podemos agregar todos los campos o propiedades personalizadas que necesitemos.
Estas líneas son importantes:
objects = MyCustomUserManager() USERNAME_FIELD = 'email' EMAIL_FIELD = 'email'
Con estas líneas vinculamos el modelo de usuario con nuestro UserManager personalizado, y también definimos el campo que actúa como un "nombre de usuario" único.
Recuerda registrar el nuevo modelo en admin.py para administrarlo desde la herramienta de administración de Django.
from django.contrib import admin from .models import MyCustomUser admin.site.register(MyCustomUser)
Abra nuevamente models.py en nuestro proyecto de muestra (o genere otro archivo para el UserManager personalizado si lo desea) y escriba un código como este:
class MyCustomUserManager(BaseUserManager): def create_user(self, email, password=None): if not email: raise ValueError('Users must have an email address') user = self.model( email=self.normalize_email(email), ) user.set_password(password) user.save(using=self._db) return user def create_superuser(self, email, password): user = self.create_user( email=email, password=password, ) user.is_admin = True user.is_staff = True user.save(using=self._db) return user
En este ejemplo, estamos ampliando BaseUserManager para crear nuestro UserManager personalizado. Crea nuestros nuevos usuarios y completa los campos personalizados como esperamos.
Definimos antes el UserManager para nuestro modelo de usuario personalizado, por lo que Django sabe qué clase usar durante la creación de un nuevo usuario.
En el archivo de configuración de nuestro proyecto podemos configurar el modelo de usuario actual para nuestro proyecto con:
# Set custom user model as the active one AUTH_USER_MODEL = 'demo.MyCustomUser' # Configure AllAuth username related management, because we are # using the e-mail as username. See: # https://docs.allauth.org/en/latest/account/advanced.html ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_UNIQUE_EMAIL = True ACCOUNT_USERNAME_REQUIRED = False ACCOUNT_USER_MODEL_USERNAME_FIELD = None
Con solo este pequeño cambio (y la migración de base de datos requerida, como de costumbre), podemos comenzar a crear usuarios con vistas de registro AllAuth para ver nuestro brillante UserManager personalizado y su modelo en acción. Rápido y fácil.
También estamos deshabilitando la administración relacionada con el nombre de usuario de AllAuth, porque estamos usando el correo electrónico como nombre de usuario en este ejemplo.
Hemos llegado al último capítulo de esta serie de AllAuth. AllAuth es una biblioteca maravillosa para manejar la autenticación en nuestras aplicaciones y hace que sea especialmente fácil trabajar con inicios de sesión sociales, gracias a su gran lista de integraciones predefinidas.
Este es el último capítulo de la serie, pero volveré a visitar AllAuth en publicaciones futuras. ¡Gracias por leer y feliz codificación!
Entre los posts de Python y Docker, también escribiré sobre otros temas relacionados (siempre temas de tecnología y programación, lo prometo... con los dedos cruzados), como:
Si encontraste alguna tecnología, lenguaje de programación o lo que sea interesante, ¡házmelo saber! ¡Siempre estoy abierto a aprender algo nuevo!
Soy Andrés, un desarrollador de software full-stack con sede en Palma, en un viaje personal para mejorar mis habilidades de codificación. También soy un escritor de fantasía autoeditado con cuatro novelas publicadas a mi nombre. ¡No dudes en preguntarme cualquier cosa!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3