Última actualización: 15 de diciembre de 2023

4.2. Hello World en WSGI

El objeto de esta sección es hacer un demostración local de Hello World en WSGI.

4.2.1. Solicitud del GET

En pocas palabras, una aplicación compatible con WSGI debe proporcionar una (función, clase) invocable que acepte un diccionario environ y una función start_response.

Para una comparación familiar de PHP, puede pensar en el diccionario environ como una combinación de $_SERVER, $_GET y $_POST, con procesamiento adicional requerido. Se espera que este invocable invoque la función start_response con el código de respuesta/datos de encabezado deseados, y luego devuelva un byte iterable con el cuerpo de la respuesta.

"""
Source code taken and improvements from the article
"Understanding Python WSGI with Examples" by Edd Mann at
https://eddmann.com/posts/understanding-python-wsgi-with-examples/
"""

# Server IP
HOST_NAME = "127.0.0.1"
# Server port
PORT_NUMBER = 8080


def app(environ, start_response):
    start_response("200 OK", [("Content-Type", "text/html")])
    return [b"Hello, world!"]


if __name__ == "__main__":
    try:
        from wsgiref.simple_server import make_server

        httpd = make_server(HOST_NAME, PORT_NUMBER, app)
        print(
            f"HTTP Server running on http://{HOST_NAME}:{PORT_NUMBER}/ use <Ctrl-C> to stop."
        )
        httpd.serve_forever()
    except KeyboardInterrupt:
        print(" o <Ctrl-C> entered, stopping web server....")

4.2.2. Solicitud del POST

Ahora que esta familiarizado con la estructura básica de una aplicación compatible con WSGI, ahora podemos experimentar con un ejemplo más práctico. A continuación, proporcionamos al cliente un formulario simple que publica un campo llamado name proporcionado para que la aplicación lo salude en consecuencia.

"""
Source code taken and improvements from the article
"Understanding Python WSGI with Examples" by Edd Mann at
https://eddmann.com/posts/understanding-python-wsgi-with-examples/
"""

import cgi

# Server IP
HOST_NAME = "127.0.0.1"
# Server port
PORT_NUMBER = 8080

# Form HTML
form = b"""<!DOCTYPE html>
<html>
    <head>
        <title>Hello User!</title>
    </head>
    <body>
        <form method="post">
            <label>Hello</label>
            <input type="text" name="name">
            <input type="submit" value="Go">
        </form>
    </body>
</html>
"""


def app(environ, start_response):
    html = form

    if environ["REQUEST_METHOD"] == "POST":
        post_env = environ.copy()
        post_env["QUERY_STRING"] = ""
        post = cgi.FieldStorage(
            fp=environ["wsgi.input"], environ=post_env, keep_blank_values=True
        )
        html = b"Hello, " + bytes(post["name"].value, "utf-8") + b"!"

    start_response("200 OK", [("Content-Type", "text/html")])
    return [html]


if __name__ == "__main__":
    try:
        from wsgiref.simple_server import make_server

        httpd = make_server(HOST_NAME, PORT_NUMBER, app)
        print(
            f"HTTP Server running on http://{HOST_NAME}:{PORT_NUMBER}/ use <Ctrl-C> to stop."
        )
        httpd.serve_forever()
    except KeyboardInterrupt:
        print(" o <Ctrl-C> entered, stopping web server....")

Aunque algo detallado, ha podido crear una aplicación web simple que maneja los datos POST suministrados utilizando la clase FieldStorage de los módulos CGI. Estos son los bloques de construcción muy simplificados utilizados en marcos populares como Flask y Django.

Importante

Usted puede descargar el código usado en esta sección haciendo clic en los siguientes enlaces: hello_world_get_request.py y hello_world_post_request.py.

Truco

Para ejecutar el código hello_world_get_request.py y hello_world_post_request.py, abra una consola de comando, acceda al directorio donde se encuentra ambos programas:

leccion4/
├── hello_world_get_request.py
└── hello_world_post_request.py

Si tiene la estructura de archivo previa, entonces ejecute el siguiente comando:

python3 hello_world_get_request.py
python3 hello_world_post_request.py

Ver también

Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.


¿Cómo puedo ayudar?

¡Mi soporte está aquí para ayudar!

Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. GMT-4 - Caracas, Venezuela.

La hora aquí es actualmente 7:35 PM GMT-4.

Mi objetivo es responder a todos los mensajes dentro de un día hábil.

Contrata mi increíble soporte profesional