img
Desarrollo

Django - Paso a paso para implementar un login a través del email

Apr 3, 2021   Carlos Alberto Lozada
   

En la mayoría de los desarrollos vía web, se contempla implementar un sistema de autenticación, con la finalidad de poder controlar quien entra en nuestra app y a su vez que acciones realiza dentro de ella.

Django provee un sistema de autenticación integrado bastante completo y editable. Esto nos permite poder adaptarlo a nuestras necesidades, mostrando una de las ventajas de este framework, su versatilidad.

En esta oportunidad vamos a crear un sistema de login pero autenticando a través del correo electrónico.

En la documentación oficial de django  nos indica como se puede extender el model User

Por acá vamos a mostrar el paso a paso

1.- Crear una app (Para efectos del ejemplo la llamaremos "users")

2.- En el archivo users / models.py importamos la clase AbstractUser y creamos la clase User

from django.db import models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
       email = models.EmailField('email address', unique=True)
       USERNAME_FIELD = 'email'   
       REQUIRED_FIELDS = ['username'] 

3.- En el archivo settings.py hacer referencia a la clase creada

AUTH_USER_MODEL = 'users.User'

4.- Preparar migraciones y ejecutarlas

python manage.py makemigrations
python manage.py migrate

5.- Crear un usuario superuser. Generalmente cuando creas un superuser lo primero que pide es un username, pero con estos cambios, lo primero que pedirá es un Email

python manage.py createsuperuser

6.-En el archivo users / views.py ingresar el código

from django.contrib.auth import views as auth_views
from django.views import generic
from django.urls import reverse_lazy

class LoginView(auth_views.LoginView):
    form_class = LoginForm
    template_name = 'login.html'
    success_url = reverse_lazy('home')

7.- En el archivo users / forms.py importar la clase AuthenticationForm

from django.contrib.auth.forms import AuthenticationForm
from django import forms

class LoginForm(AuthenticationForm):
    username = forms.CharField(label='Email / Username')

8.- En el archivo urls.py ingresar el código

from users.views import LoginView
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', LoginView.as_view(), name='login')]

9.- En la carpeta de plantillas, crear un archivo "login.html" por ejemplo, con el siguiente código

<form action="{% url 'login' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" id="submit">Login</button>
</form>

10.- Finalmente ejecutar el programa

python manage.py runserver


Espero sea de utilidad esta información, te invito a seguir explorando Django. 

Por acá te dejo el repositorio GitHub para que puedas practicar con el código. 

Sigamos en contacto

Carlos Lozada

<Que tengas una programación de marca mayor/>

Destacados