Patrón de diseño Publicar/Redireccionar/Obtener (PRG)

Requisito previo: protocolo HTTP , requests GET y POST usando Python

Introducción:

PRG es uno de los muchos patrones de diseño utilizados en el desarrollo web. Se utiliza para evitar el reenvío de un formulario causado por la recarga de la misma página web después de enviar el formulario. Elimina la redundancia de contenido para fortalecer el SEO y hace que el sitio web sea fácil de usar.
   Es utilizado por tiendas en línea grandes y confiables y otros sitios web robustos que están destinados a ser fáciles de usar.

Problema:

Cuando intentamos enviar un formulario web, se envía una solicitud HTTP POST al servidor. El servidor procesa la solicitud y envía la respuesta al cliente con el código de respuesta 2XX. Cuando el cliente intenta actualizar/recargar la página web, sin querer envía otra solicitud HTTP POST al servidor con los mismos datos que antes. Esto puede causar resultados no deseados, como compras web duplicadas.

El navegador muestra un cuadro de mensaje de advertencia después de recargar como se muestra a continuación:

Trabajo interno:

A continuación se muestra el diagrama de bloques del funcionamiento interno del problema anterior.

Solución:

Para evitar este problema, muchos desarrolladores web utilizan el patrón POST/REDIRECT/GET , en lugar de devolver una página web directamente, el POST devuelve una redirección a otra página web o la misma según los requisitos.

Trabajo interno:

A continuación se muestra el diagrama de bloques del funcionamiento interno de la solución anterior.

A minimal python and HTML code using flask framework to demonstrate above concept.

  • Cree un archivo llamado app.py en el directorio raíz del proyecto y escriba el siguiente código en él. E instale el matraz usando-

    $pip install flask
    
  • from flask import Flask, render_template, redirect, request, url_for
      
    # Initiate flask app
    app = Flask(__name__)
      
    # Declare routes and methods
    @app.route('/', methods =['GET', 'POST'])
    def home():
        # If it is POST request the redirect
        if request.method =='POST':
            return redirect(url_for('home'))
      
        return render_template('home.html', title ='Home')
      
    if __name__=='__main__':
        app.run()
  • Cree una carpeta de plantillas en el directorio raíz del proyecto y cree un archivo home.html dentro del directorio de plantillas y escriba el siguiente código en él.

  • <!-- Create a form -->
    <form action="" method="post">
        <!-- Create a input box -->
        <input type="text", value="Suraj Yadav"><br><br>
        <!-- Create a submit button -->
        <input type="submit" value="Submit">
    </form>
  • Para ejecutar el tipo de servidor web en la consola:
    $python app.py
    Output:
    Running on http://127.0.0.1:5000/
    
  • Vaya al navegador web y escriba localhost:5000 y presione enter.

  • Salida de la consola:
    en la imagen a continuación, la primera solicitud GET se realiza cuando usamos localhost: 5000, luego enviamos los datos al servidor. Ahora, después de procesar los datos, el servidor nos redirige al realizar una solicitud GET, por lo que el servidor realiza la tercera solicitud GET y, finalmente, se realiza la cuarta solicitud GET cuando intentamos actualizar la página.

    Nota: Intenta jugar con el código sin redirigir.

Publicación traducida automáticamente

Artículo escrito por heyiamsurya 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 *