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.