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