Creación de una API de modelo de usuario personalizada que amplía AbstractUser en Django

Cada nuevo proyecto de Django debe usar un modelo de usuario personalizado. La documentación oficial de Django dice que es «muy recomendable», pero iré un paso más allá y diré sin dudarlo: estás completamente loco por no usar un modelo de usuario personalizado desde el principio.

¿Por qué necesitas un modelo de usuario personalizado en Django? 

Cuando comience su proyecto con un modelo de usuario personalizado, deténgase a considerar si esta es la opción correcta para su proyecto. Mantener toda la información relacionada con el usuario en un modelo elimina la necesidad de consultas de bases de datos adicionales o más complejas para recuperar modelos relacionados. Por otro lado, puede ser más adecuado almacenar información de usuario específica de la aplicación en un modelo que tenga una relación con su modelo de usuario personalizado. Eso permite que cada aplicación especifique sus propios requisitos de datos de usuario sin que otras aplicaciones entren en conflicto o rompan las suposiciones. También significa que mantendría su modelo de usuario lo más simple posible, centrado en la autenticación y siguiendo los requisitos mínimos que Django espera que cumplan los modelos de usuario personalizados.

Así que creo que está claro por qué necesitamos un modelo de usuario personalizado en django, aquí en este artículo vamos a aprender cómo crear un modelo de usuario personalizado y su api en django ahora, comencemos con la parte de codificación. 

Configuración –

  • Cree y navegue a un directorio dedicado llamado usuarios para nuestro código

  • hacer un nuevo proyecto de Django llamado inicio de sesión

  • hacer una nueva aplicación para los usuarios

  • iniciar el servidor web local

Comandos –

$ cd ~/Desktop
$ mkdir code && cd code $ pipenv install django $ pipenv shell $ django-admin startproject login $ python manage.py startapp api $ pipenv install rest_framework

Ahora, agregue el siguiente código en settings.py,

INSTALLED_APPS = [
    'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
   # Add these lines to to your
   # installed apps section in settings. py
   'rest_framework',
   'rest_framework.authtoken',
   'api',
   'rest_auth'
]
AUTH_USER_MODEL ='api.urls'
REST_FRAMEWORK = {
   'DEFAULT_PERMISSION_CLASSES': (
       'rest_framework.permissions.IsAuthenticated',
   ),
   'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
       'rest_framework.authentication.SessionAuthentication',
       'rest_framework.authentication.BasicAuthentication',
   ),
}

Después de esto, necesitamos crear un modelo de usuario personalizado. Para esto, cambie su archivo models.py de la siguiente manera. Aquí estamos extendiendo AbstractUser y cambiando las credenciales de autenticación a Correo electrónico. Y también estamos agregando algunos campos adicionales en nuestro usuario personalizado

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from datetime import date
class User(AbstractUser):
   username = models.CharField(max_length = 50, blank = True, null = True, unique = True)
   email = models.EmailField(_('email address'), unique = True)
   native_name = models.CharField(max_length = 5)
   phone_no = models.CharField(max_length = 10)
   USERNAME_FIELD = 'email'
   REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
   def __str__(self):
       return "{}".format(self.email)

Después de esto, también debemos guardar estos cambios en el panel de administración. Agregue este código a admin.py

from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin
from .models import User
class UserAdmin(BaseUserAdmin):
   form = UserChangeForm
   fieldsets = (
       (None, {'fields': ('email', 'password', )}),
       (_('Personal info'), {'fields': ('first_name', 'last_name')}),
       (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
                                      'groups', 'user_permissions')}),
       (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
         (_('user_info'), {'fields': ('native_name', 'phone_no')}),
   )
   add_fieldsets = (
       (None, {
           'classes': ('wide', ),
           'fields': ('email', 'password1', 'password2'),
       }),
   )
   list_display = ['email', 'first_name', 'last_name', 'is_staff', 'native_name', 'phone_no']
   search_fields = ('email', 'first_name', 'last_name')
   ordering = ('email', )
admin.site.register(User, UserAdmin)

Ahora cree un archivo serializers.py en su aplicación. Agregue el siguiente código a sus serializadores. pía

rom rest_framework import serializers
from api.models import  User
class UserSerializer(serializers.ModelSerializer):
   class Meta:
       model = User
       fields = "__all__"

Ahora cree el archivo api/urls.py dentro de su aplicación y agregue las siguientes líneas

from django.contrib import admin
from django.urls import path
from django.conf.urls import include
urlpatterns = [
   path('auth/', include('rest_auth.urls')),
]

Ahora agregue el siguiente código a login/urls.py de su proyecto

from django.contrib import admin
from django.urls import path
 
urlpatterns = [
   path('admin/', admin.site.urls),
   path(" ", include("api.urls"))
]

Estamos listos con el modelo de usuario personalizado. Ahora guarde estos cambios en su proyecto y realice migraciones a través de CLI

$ python manage.py makemigrations users
$ python manage.py migrate

Ahora crea un superusuario

$ python manage.py createsuperuser
Email address: test@test.com
Password:
Password (again):
Superuser created successfully.

Ahora ejecute el servidor con.

$ python manage.py runserver

Y vaya a través de la URL. Puede verificar su usuario personalizado en el panel de administración

Producción –

Publicación traducida automáticamente

Artículo escrito por 05avinashvish y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *