Libro Python Aplicado de Eugenia Bahit. GNU/Linux, ciencia de datos, y desarrollo web

Banner de Python Aplicado

Desarrollo Web nativo con Python
cómo crar aplicaciones Web en Python sin usar frameworks


Cita con formato IEEE:
E. Bahit, "Python como CGI para aplicaciones Web", in Python Aplicado, 4th ed., EBRC Publisher, 2022, pp. 207-233.

Cita con formato APA 7:
Bahit, E. (2022). Python como CGI para aplicaciones Web. In Python Aplicado (4th ed., pp. 207-233). EBRC Publisher.

Cita en línea:
(Bahit, 2022)

Cualquier lenguaje de programación, incluso aquellos lenguajes compilados como C, pueden ser empleados para crear aplicaciones Web. Python no es una excepción y al igual que el resto de lenguajes, no requiere de herramientas especiales ni de Frameworks para emplearse en la programación de aplicaciones Web.

Para programar aplicaciones Web sobre Apache, en cualquier lenguaje, solo se necesita:

Este último requisito, es el que hace posible que las aplicaciones Web puedan ser programadas en cualquier lenguaje soportado por el Sistema Operativo.

Entender la interfaz CGI

CGI es una capa intermedia (gateway) entre un servidor HTTP y los scripts escritos en cualquier lenguaje que pueda ser entendido por el Sistema Operativo. Esto significa que cualquier script que pueda ser ejecutado manualmente en el sistema operativo también puede ser ejecutado por una interfaz cuando se accede desde un servidor HTTP.

Un script accesible a través de un servidor Web es conocido como «Script CGI».

El único requisito que un script CGI debe cumplir, es considerar las especificaciones de entrada y salida del protocolo HTTP. Esto significa:

Antes de profundizar en estos temas se da un ejemplo práctico de código fuente en Python que ayude a entender las diferencias entre un script convencional y un script CGI.

A continuación se muestran dos versiones de un «Hola Mundo». Una, de un script convencional; la segunda, de un script CGI.

Script convencional:

#!/usr/bin/env python
print("Hola Mundo")

Script CGI:

#!/usr/bin/env python
print("Content-type: text/html; charset=utf-8")
print("")
print("Hola Mundo")

Como puede verse, la única diferencia, en la práctica, para un script CGI, es el envío previo de dos líneas: una línea de cabeceras HTTP y una línea en blanco que indica el final de dichas cabeceras y el comienzo del cuerpo del mensaje.

Entender el servidor HTTP de Apache

Normalmente, cuando una solicitud HTTP es enviada a un servidor, Apache recibe dicha solicitud y decide qué hacer con ella basándose en la información provista en:

Opcionalmente, Apache también puede acceder al archivo de configuración del directorio raíz de la aplicación (y al de sus respectivos subdirectorios), denominado .htaccess.

El archivo de configuración de Apache, tiene directivas comunes a todos los host. Este archivo no suele tener indicaciones particulares. Las indicaciones particulares se encuentran en el Virtual Host, y es aquí donde se establece si los archivos de una aplicación deben ser ejecutados con algún módulo determinado como CGI.

Los módulos de Apache son bibliotecas que otorgan funciones específicas al servidor HTTP. En ocasiones, Apache se vale de estos módulos para realizar determinadas acciones. Una de ellas, es permitir la ejecución de scripts. Para permitir la ejecución de scripts CGI, el servidor HTTP de Apache debe valerse de un módulo como el módulo cgi. También existen otras alternativas (como FastCGI, por ejemplo) pero dado el carácter sintético de este apartado, solo se abarcará cgi.

Normalmente, un Virtual Host a la escucha en un puerto específico, define al menos tres parámetros:

<VirtualHost *:80>
    ServerName eugeniabahit.co.uk
    DocumentRoot "/var/www/torc-web/html"
    ErrorLog "/var/log/torc-web/error.log"
    CustomLog "/var/log/torc-web/access.log" combined
</VirtualHost>

Adicionalmente, puede definir indicaciones particulares para un directorio específico, como por ejemplo, la opción de no crear un índice de archivos para evitar exponer el árbol de directorios de la aplicación:

<VirtualHost *:80>
    ServerName eugeniabahit.co.uk
    DocumentRoot "/var/www/torc-web"
    ErrorLog "/var/log/torc-web/error.log"
    CustomLog "/var/log/torc-web/access.log" combined

    <Directory "/var/www/torc-web/html">
        Options -Indexes
    </Directory>
</VirtualHost>

Si se desea permitir la ejecución de scripts CGI, será necesario:

<VirtualHost *:80>
    ServerName eugeniabahit.co.uk
    DocumentRoot "/var/www/torc-web"
    ErrorLog "/var/log/torc-web/error.log"
    CustomLog "/var/log/torc-web/access.log" combined

    <Directory "/var/www/torc-web/html">
        Options -Indexes +ExecCGI
        setHandler cgi-script
    </Directory>
</VirtualHost>

Conclusiones. Como puede observarse, las únicas diferencias que existen en comparación a la creación de un sitio Web estático (sin programación del lado del servidor) son solo dos:

Montar un Virtual Host localmente

En lo sucesivo se darán unas bases de conocimiento mínimas para que estudiantes de programación de nivel medio e inicial puedan introducirse en el tema, pero consideraciones más profundas sobre la Ingeniería de Aplicaciones Web serán tratadas en futuras publicaciones.

A continuación, se explican detalladamente los pasos a seguir para montar un VirtualHost local para ejecutar scripts CGI mediante el protocolo HTTP.

Instalación y configuración de Apache

Para instalar Apache en Debian GNU/Linux y derivados, se debe ejecutar:

apt install apache2

En Fedora, Red Hat y derivados:

dnf install httpd
systemctl enable httpd.service

La última línea habilita el inicio automático del servicio. En Debian y derivados el inicio es automático tras la instalación13.

Para más información sobre instalación, visitar la documentación oficial en el siguiente enlace:...

Antes de comenzar, se recomienda habilitar el acceso de Apache al directorio home del usuario. Esto solo debe hacerse localmente, nunca en producción.