requisitos previos:
Cuando enviamos los datos utilizando el formulario HTML, envía los datos al servidor en una URL particular que se define en el atributo de acción. Para realizar diferentes acciones con un solo formulario HTML, solo necesitamos agregar varios botones de envío en el formulario. Por ejemplo, si revisa el código de la aplicación del boletín, encontrará botones de suscripción y cancelación de suscripción en un solo formulario HTML, pero ambos realizan acciones diferentes.
En este tutorial, vamos a crear una aplicación de boletín usando Django. Agregaremos botones de suscripción y cancelación de suscripción en un solo formulario HTML. Además, agregaremos o eliminaremos la dirección de correo electrónico del usuario de nuestra base de datos según el usuario haga clic en el botón de suscripción o cancelación de suscripción.
Para crear la aplicación Django de boletín simple, siga los pasos a continuación.
Crear un nuevo proyecto Django
Para iniciar un nuevo proyecto de Django, su computadora local debe cumplir con los requisitos previos que se detallan anteriormente. Los usuarios pueden usar el siguiente comando para iniciar un nuevo proyecto.
django-admin startproject newslatter
A continuación, vaya al directorio del proyecto.
cd newslatter
Inicie una aplicación de boletín
Para iniciar una nueva aplicación dentro del proyecto del boletín, ejecute el siguiente comando dentro del directorio del proyecto.
django-admin startapp appnewslatter
Ahora, agregue «appnewslatter» dentro de la sección install_apps en settings.py del proyecto de boletín.
path: newslatter/settings.py
A continuación, edite urls.py dentro de la carpeta del boletín y agregue el siguiente código.
Path: newslatter/urls.py
Nombre de archivo: urls.py
Python3
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), #including URLS of appnewslatter app path("", include('appnewslatter.urls')), ]
Cree un nuevo archivo urls.py dentro de la carpeta «appnewslatter». Ahora, el directorio de su proyecto debería verse como la imagen de abajo.
Edite urls.py dentro de la carpeta appnewslatter. Estamos agregando la URL de la página de inicio.
Path: appnewslattere/urls.py
Nombre de archivo: urls.py
Python3
from django.urls import path from . import views urlpatterns = [ # URL to open home page path("", views.home, name='home'), ]
Cree una carpeta de «plantillas» dentro de la carpeta appnewslatter para almacenar las plantillas HTML.
path: appnewslatter/templates
Cree un archivo news.html dentro de la carpeta de plantillas para agregar un formulario para nuestra aplicación Newslatter.
Path: appnewslatter/templates/news.html
Agregue el siguiente código dentro del archivo news.html que incluye un solo formulario con 2 botones de envío. Cada botón de envío tiene un nombre único. En el archivo views.py, identificaremos desde qué botón los usuarios han enviado la solicitud de publicación usando el nombre del botón.
Nombre de archivo: noticias.html
HTML
<!DOCTYPE html> <html> <head> <title>NewsLatter</title> </head> <body> <!--showing success message--> {% if messages %} <ul class="messages"> {% for message in messages %} <li{% if message.tags %} class="{{ message.tags }}"{% endif %}> {{ message }}</li> {% endfor %} </ul> {% endif %} <!--Form with multiple submit buttons--> <form action="" method="POST"> <label for="email">Enter your email:</label> <input type="email" id="email" name="email" /> <br> <br> <button type="submit" name="subscribe">Subscribe</button> <button type="submit" name="unsubscribe">Unsubscribe</button> </form> </body> </html>
Ahora, necesitamos crear una tabla en la base de datos para almacenar el correo electrónico de los usuarios. Editaremos el archivo models.py .
path: appnewlatter/models.py
Nombre de archivo: modelos.py
Python3
from django.db import models # creating database model to store email class newslatteremail(models.Model): userEmail = models.EmailField(max_length=254) def __str__(self): return self.userEmail
Registre el modelo creado dentro del archivo admin.py.
Path: appnewslatter/admin.py
Nombre de archivo: admin.py
Python3
from django.contrib import admin from .models import newslatteremail # registering the model admin.site.register(newslatteremail)
Después de registrar el modelo, debemos migrarlo. Los usuarios deben ejecutar los 2 comandos siguientes uno por uno.
python manage.py makemigrations python manage.py migrate
Ahora, editaremos el archivo views.py y agregaremos el código para manejar las requests de los botones de suscripción y cancelación de suscripción. Aquí, verificamos de qué botón de envío obtenemos la solicitud de publicación con la ayuda del atributo de nombre del botón.
Sintaxis:
if 'name_of_button' in request.POST: # perform some action
Ejemplo:
if 'subscribe' in request.POST: # add the user email in database if 'unsubscribe' in request.POST: # remove the user email from database
Copie y pegue el siguiente código dentro del archivo views.py.
Path: appnewslatter/views.py
Nombre de archivo: vistas.py
Python3
from django.shortcuts import render from django.contrib import messages from .models import newslatteremail def home(request): # if post request comes from the subscribe button # then saving user email in our database if 'subscribe' in request.POST: email = newslatteremail() email.userEmail = request.POST.get("email") email.save() messages.info( request, 'You have successfully subscribed to our newslatter.') # if post request comes from the unsubscribe button # then deleting the user email from our database if 'unsubscribe' in request.POST: newslatteremail.objects.get( userEmail=request.POST.get("email")).delete() messages.info(request, 'sorry to see you!!!') return render(request, 'news.html')
Finalmente, creamos una aplicación de boletín simple y aprendimos cómo podemos agregar múltiples botones de envío en un solo formulario HTML. Ejecutemos el proyecto y veamos el resultado. Los usuarios pueden ejecutar la aplicación Django usando el siguiente comando.
Python manage.py runserver
Producción:
Publicación traducida automáticamente
Artículo escrito por shubhamvora05 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA