Django: ¿cómo agregar varios botones de envío en un solo formulario?

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

Deja una respuesta

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