Posts Tagged ‘CGI’

h1

Problema con la codificación de caracteres en scripts CGI con Python 3

03/11/2011

Ansioso por empezar a utilizar la nueva versión de Python 3 he tenido algunos problemas con la codificación de caracteres: concretamente, aunque Python ahora trabaja siempre con cadenas de texto utf-8, cuando se ejecuta como script CGI se empeña en transformar la salida a ASCII, con lo que los caracteres acentuados son sustituidos por símbolos extraños.

Tras investigar un poco he descubierto una solución bastante simple, que consiste en añadir las siguientes dos líneas al comienzo del script:

import codecs, sys
sys.stdout = codecs.getwriter(‘utf-8’)(sys.stdout.buffer)

De este modo la salida estándar se hace también en utf-8.

Por cierto, para que el editor Geany utilice Python 3 (lo cual también me ha confundido bastante, hasta que me he dado cuenta de que usaba Python 2.7) hay que editar un fichero de configuración y modificar un par de líneas:

sudo nano /usr/share/geany/filetypes.python

y cambiamos las líneas

compiler=python3 -c “import py_compile; py_compile.compile(‘%f’)”
run_cmd=python3 “%f”

Ahora ¡a transformar todos mis ejercicios de TIC a HTML5!

h1

Usar python en webs dinámicas.

09/10/2011

A raíz de este post recuerdo que necesito un servidor web que soporte python para la creación de webs dinámicas. La configuración de apache es muy sencilla si utilizamos el módulo CGI.

Para empezar permitimos que cada usuario pueda tener su web en una carpeta propia con

sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/userdir.conf
sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/userdir.load

De este modo la página web de usuario “user” se encontrará en /home/user/public_html/ y será accesible a través de la dirección http://servidor/~user/

Ahora es cuando realmente activamos los scripts CGI, solamente en una carpeta llamada cgi-bin dentro de cada carpeta public_html. Lo único que hay que hacer es editar el fichero /etc/apache2/sites-available/default y añadir las siguientes líneas:

<Directory /home/*/public_html/cgi-bin>
Options +ExecCGI
AddHandler cgi-script .py
</Directory>

Solo tenemos que reiniciar el servidor Apache, y los ficheros con extensión .py dentro de la carpeta cgi-bin serán ejecutados en lugar de leídos. Un pequeño ejemplo:

#!/usr/bin/python

print “Content-Type: text/plain\n\n”

print “Hola, mundo!”

Nota: Ya sé que existen soluciones más eficientes y modernas, como usar mod_python, mod_wsgi, o cualquier framework web. Pero CGI es simple de configurar y, sobre todo, mis alumnos de TIC2 que ya conocen python no han de aprender nada nuevo para empezar a programar.

A %d blogueros les gusta esto: