"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Capítulo de Django AllAuth Ampliación del modelo de usuario de Django AllAuth con campos personalizados

Capítulo de Django AllAuth Ampliación del modelo de usuario de Django AllAuth con campos personalizados

Publicado el 2024-08-25
Navegar:390

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.

Lista de capítulos

  • Capítulo 1: La solución todo en uno para autenticación en Django
  • Capítulo 2 - Cómo instalar y configurar Django AllAuth
  • Capítulo 3: Inicio de sesión social con Django AllAuth
  • Capítulo 4 - Personalización de la interfaz de usuario de Django AllAuth
  • Capítulo 5 - Ampliación del modelo de usuario Django AllAuth con campos personalizados ←¡Éste!

Django AllAuth Chapter  Extending Django AllAuth user model with custom fields

modelo de usuario de Django

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:

  • https://docs.djangoproject.com/en/5.0/ref/contrib/auth/

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.

Crear una tabla de usuarios personalizada

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)

Crear un administrador de usuarios personalizado

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.

Usando el administrador de usuarios y el modelo personalizados

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.

Y ese es el final... ¿o no?

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!

Sobre la lista

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:

  • Arquitectura de software
  • Entornos de programación
  • Sistema operativo Linux
  • Etc.

Si encontraste alguna tecnología, lenguaje de programación o lo que sea interesante, ¡házmelo saber! ¡Siempre estoy abierto a aprender algo nuevo!

Sobre el autor

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!

Declaración de liberación Este artículo se reproduce en: https://dev.to/doctorserone/django-allauth-chapter-5-extending-django-allauth-user-model-with-custom-fields-55ia?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

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