Registro de usuario de Django con confirmación por correo electrónico
En este tutorial de Python Django, vamos a aprender sobre registro de inicio de sesión de usuario en el marco Django y luego de eso, también enviaremos el correo electrónico de confirmación para confirmar el registro del usuario a través del correo electrónico.
¿Cómo crear un registro de usuario con confirmación de correo electrónico en Django?
Aquí, en este tutorial, vamos a crear un registro de usuario con una aplicación de confirmación por correo electrónico.
- Primero, configuraremos una aplicación Django básica y la configuraremos.
- Generación de tokens para autenticar a nuestros usuarios a través de correo electrónico de confirmación.
- Creación de modelos, vistas y plantillas.
- Cree el backend y la configuración de correo electrónico y vea la configuración del servidor SMTP.
Paso 1: configurar un proyecto Django
En primer lugar, crearemos un entorno virtual.
Crearemos un entorno virtual en la carpeta (crear una carpeta en caso de no crearse) en el que vamos a configurar nuestro Registro de usuario Proyecto Django. Para crear un entorno virtual, use estos comandos en un símbolo del sistema (como administrador) o terminal de código VS.
> python -m auth-env
Ahora, hemos creado con éxito un entorno virtual, es decir aut-env.
Siga el siguiente comando para activar el entorno virtual.
> auth-env\Scripts\activate
Hemos creado y activado con éxito un entorno virtual aut-env en nuestro proyecto Django. Aparecerá en su terminal como se muestra en la imagen a continuación.
Instalando Django en nuestro entorno virtual.
Cada vez que creamos un entorno virtual, necesitamos instalar el requisito del paquete de nuestro proyecto. Ahora instalaremos Django en nuestro virtualenv usando tel pipa dominio.
> pip install django
Creación de un proyecto Python Django
Para crear un proyecto Django en Python, ejecute los siguientes comandos en la terminal.
> django-admin startproject UserAuth
Podemos ver en la barra lateral del código VS que nuestro proyecto UsuarioAuth se crea y genera automáticamente algunos archivos y directorios como se muestra en la imagen a continuación.
Proyecto creado en la aplicación Django.
Mover al directorio del proyecto
Para ejecutar nuestro proyecto en el servidor, debemos movernos al directorio del proyecto en la terminal usando el siguiente comando.
> cd UserAuth
Crear una aplicación Django
Para organizar el código y facilitar la depuración, crearemos una aplicación Django llamada cuentas en nuestro directorio de proyectos usando el siguiente comando.
> python manage.py startapp accounts
Hasta ahora, hemos creado con éxito nuestro proyecto. UsuarioAuth y aplicación cuentas.
Configurar y registrar la aplicación
Para la configuración de la aplicación, tenemos que ir a la configuración.py archivo que está en nuestro directorio de proyectos UsuarioAuth entonces ve a la APLICACIONES INSTALADAS enumere y registre los ‘cuentas’ aplicación El código se menciona a continuación para una mejor comprensión.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts',
]
Configuración de URL
Ahora necesitamos agregar una ruta URL en nuestro urls.py archivo. Para diseñar URL en la aplicación, hay una configuración de URL de módulo de Python. Este módulo es código de Python puro y es un mapeo entre expresiones de ruta de URL a funciones de Python.
Entonces, agregaremos el siguiente código en nuestro urls.py archivo de la UsuarioAuth Carpeta.
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('',include('accounts.urls')),
path('admin/', admin.site.urls),
]
Creación de plantillas en nuestras cuentas de aplicaciones.
En este paso, crearemos algunas plantillas en formato HTML en nuestro directorio de aplicaciones. cuentas. Asegúrese de utilizar plantillas de palabras exactas. Para crear plantillas, haga clic en cuentas y crear nueva carpeta plantillas y en esas plantillas crea un archivo HTML base.html y su código se menciona a continuación.
{% block content %}
{% endblock %}
Ahora vamos a crear tres plantillas más iniciar sesión.html, inicio.html, y registro.html dentro de plantillas carpeta, y después de eso, registraremos ambos archivos en las vistas de nuestra aplicación. siga el siguiente código login.html archivo.
{% extends "base.html" %}
{% block content %}
Log in to user account
{% endblock %}
Después de crear login.html, usaremos el código completo de iniciar sesión.html en inicio.html y registro.html y por ahora, solo cambia el título en el registro.html archivo.
Registro de usuario en la aplicación Django error
Lea las funciones de importación de Python Django
Creando URLs en nuestra aplicación
Vamos a crear URLs en nuestro cuentas aplicación El código que se utiliza en la aplicación. urls.py se menciona a continuación.
from django.contrib import admin
from django.urls import path
from .views import *
urlpatterns = [
path('', home , name="home"),
path('register' , register_attempt , name="register_attempt"),
path('login' , login_attempt , name="login_attempt"),
]
Creación de vistas en la aplicación.
En el puntos de vista de la aplicación de cuentas, crearemos una ruta para acceso y registro páginas HTML.
from django.shortcuts import render
def home (request):
return render (request , 'home.html')
def login_attempt(request):
return render (request, 'register.html')
def register_attempt (request):
return render(request , 'login.html')
Después de este paso, agregaremos href hipervínculo en el archivo login.html y register.html. Consulte las imágenes que se muestran a continuación.
hipervínculo para el archivo register.html
hipervínculo para el archivo login.html
Ahora hemos completado nuestras plantillas HTML de inicio de sesión y registro que representaremos en el servidor.
Paso 2: Ejecute el servidor para ver nuestra aplicación
Vamos a ejecutar el servidor de desarrollo para ver nuestra aplicación en el lado del servidor. Ejecute el comando mencionado a continuación en su terminal y vaya al enlace generado.
Página de inicio de sesión para el inicio de sesión del usuario
Paso 3: Generación de un token para la autenticación
En este paso, pasaremos a la siguiente parte de nuestra aplicación donde generaremos tokens para autenticar nuestro registro de usuario a través del correo electrónico.
Para eso, crearemos una plantilla. exito.html y token_send.html y en views.py agregaremos vistas para eso también. Ahora cree estos archivos success.html y token_send.html en el plantillas carpeta donde hemos creado nuestras plantillas anteriores.
Después de crear plantillas vamos a vistas.py y agregue vistas para estos dos archivos.
def register_attempt (request):
return render(request , 'register.html')
def token_send (request):
return render(request , 'token_send.html')
def success (request):
return render(request , 'success.html')
Junto con esto, también debemos registrar sus URL. Por lo tanto, vaya a urls.py de la aplicación de cuentas y siga el código mencionado a continuación.
urlpatterns = [
.
.
.
path('token' , token_send , name="token_send"),
path('success' , success, name="success")
]
Ahora regrese a nuestras plantillas y siga el siguiente código html para la estructura de token_send.html y exito.html.
#success.html
{% extends "base.html" %}
{% block content %}
You have successfully registered as user
#send_token.html
{% extends "base.html" %}
{% block content %}
We have sent you an email
Creando modelos
Ahora pasaremos al modelo de usuario para ver cómo enviaremos un correo electrónico de confirmación a un usuario después de la autenticación. En Django, hay dos métodos para la autenticación: primero, sobrescribir al usuario o usar la relación para extender el campo del usuario. Vamos a utilizar el segundo. Primero, cree modelos en modelos.py de nuestra aplicación.
Siga el siguiente código para modelos.py.
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User)
auth_token = models.CharField(max_length=100)
is_verified = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.user.username
Hacer migraciones
Hemos creado modelos ahora para ejecutar estos cambios, necesitamos propagar los cambios que hemos realizado en los modelos en la base de datos. Ahora, para realizar migraciones, ejecute los siguientes comandos en la terminal.
> python manage.py makemigrations
> python manage.py migrate
Lea Cómo registrar un usuario con verificación OTP en Django
Paso 4: Crea un superusuario
Para ver los datos, debemos ingresar al panel de administración de Django y, para eso, debemos crear una cuenta de superusuario para acceder al panel de administración de Django. Ahora siga el siguiente comando en la terminal para crear un superusuario.
> python manage.py createsuperuser
Creando publicaciones en views.py
En este paso, vamos a crear un POST IN vistas.py archivo para nuestro registro página. También hemos utilizado el método de prueba y captura para que no arruine la experiencia del usuario.
def register_attempt (request):
if request.method == 'POST' :
username = request.POST.get('username')
email = request.POST.get('email')
password = request.POST.get('password')
try:
if User.objects.filter(username = username).first():
messages.success(request,'Username is taken.')
return redirect('/register')
elif User.objects.filter(email = email).first():
messages.success(request, 'Email is taken')
return redirect('/register')
user_obj = User.objects.create(username = username, email=email)
user_obj.set_password(password)
profile_obj = Profile.objects.create(user = user_obj , token = str(uuid.uuid4))
profile_obj.save()
return redirect('/token')
except Exception as e:
print(e)
return render(request , 'register.html')
Después de esto, agregaremos un campo en la página register.html y también un mensaje de alerta en nuestro formulario de registro con la ayuda del campo de mensajes de Django. Entonces, simplemente edite el código mencionado a continuación en registro.html
Register for user account
Ir a administrador.py y agregue el código mencionado a continuación.
from django.contrib import admin
from .models import *
admin.site.register(Profile)
Crear una función enviar correo, verificar, y error en vistas.py
def verify(request , auth_token):
try:
profile_obj = Profile.objects.filter(auth_token = auth_token).first()
if profile_obj:
profile_obj.is_verified = True
profile_obj.save()
messages.success(request, 'You account is been verified')
return redirect('/login')
else:
return redirect('/error')
except Exception as e:
print(e)
def error_page(request):
return render(request, 'error.html')
def send_mail_after_registration(email,token):
subject = "Your account needs to be verified"
message = f'Hi paste your link to verify your account http://127.0.0.1:8000/verify/{token}'
email_from = settings.EMAIL_HOST_USER
recipient_list = [email]
send_mail(subject, message , email_from ,recipient_list)
En caso de que tengamos un error, tenemos que crear un error.html archivo también para representar la página de error.
{% extends "base.html" %}
{% block content %}
Error
{% endblock %}
Registre estas funciones en urls.py.
urlpatterns = [
.
.
.
.
path('success' , success, name="success"),
path('verify/' , verify ,name = "verify"),
path('error' , error_page , name = "error")
]
Paso 5: configurar el backend de correo electrónico
Para acceder a la configuración SMTP del servidor de correo electrónico mediante el cual podremos enviar correos electrónicos a través de nuestra aplicación. Registre los siguientes ajustes en el configuración.py archivo.
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = "your email account"
EMAIL_HOST_PASSWORD = "16-digit code generated by gmail in 2-factor authentication"
Ejecutar servidor de desarrollo
Ahora que hemos completado la configuración requerida para nuestra aplicación, ejecutaremos el servidor de desarrollo y probaremos nuestra aplicación. Después de ejecutar el comando python manage.py servidor de ejecución abre el http://127.0.0.1:8000/registro
Registro de usuario para la autenticación en la aplicación Django
Después de registrarse, verá un mensaje de éxito para que se haya creado la cuenta.
Mensaje de éxito para el registro de usuario
Ahora vaya a la cuenta de correo electrónico que ha registrado en el formulario de registro. Recibirá un enlace en su correo electrónico que lo redirigirá a la página de inicio de sesión con el mensaje de confirmación de verificación de cuenta exitosa.
Registro de usuario confirmado a través del enlace
Conclusión
En este tutorial de Python Django, creamos con éxito una aplicación de registro de usuarios de Django y también verificamos el registro a través del correo electrónico, y también probamos el funcionamiento de nuestra aplicación.
También hemos aprendido sobre la Configuración del servidor SMTP y generar tokens para la autenticación de usuarios.
como cambio el localhost, por la ip de mi servidor donde corre la ap?
Para cambiar el localhost por la IP de su servidor donde corre la aplicación, debe modificar el archivo settings.py de su proyecto Django.
En la sección ALLOWED_HOSTS, agregue la dirección IP de su servidor. Por ejemplo:
Python
ALLOWED_HOSTS = [‘192.168.1.1’, ‘10.0.0.1’]
También debe modificar el enlace del correo electrónico de confirmación. El enlace de confirmación se encuentra en el archivo templates/registration/activation_email.html.
En el enlace de confirmación, cambie http://localhost:8000/activate/ por la dirección IP de su servidor. Por ejemplo:
HTML
Activar cuenta
Una vez que haya realizado estos cambios, debe reiniciar su servidor Django.
Aquí hay un ejemplo completo de cómo cambiar el localhost por la IP de su servidor:
Python
ALLOWED_HOSTS = [‘192.168.1.1’, ‘10.0.0.1’]
# templates/registration/activation_email.html
Activar cuenta
Después de realizar estos cambios, podrá acceder a la aplicación desde su servidor.