[Python-es] Equivalente en fastcgi

Chema Cortes pych3m4 en gmail.com
Jue Sep 15 03:37:05 EDT 2016


El mié., 14 sept. 2016 a las 19:07, Juan M. Puertas (<soft.sirius en gmail.com>)
escribió:

> ​Hola amigos.
> Ya que ahora no se pueden hacer CGIs en Python como vimos en temas
> anteriores. Por lo que he leído aquí:
> http://unaaldia.hispasec.com/2016/07/colega-donde-esta-mi-proxy.html esto
> no afecta a fastcgi.
> Pero no encuentro documentación sobre cómo hacer las cosas con fastcgi,
> por ejemplo me gustaría saber cual es el equivalente para recibir
> argumentos enviados desde HTML. En CGI es así:
>
> form = cgi.FieldStorage()
>
> ¿Cómo se hace con fastcgi?
> Gracias :-)
>
>>

Lo recomendable sería usar WSGI para desacoplar la aplicación web de la
infraestructura que vaya a dar el servicio. Con WSGI puedes usar fastcgi
entre otras alternativas. El interface WSGI se implementa como un
"callable" con dos argumentos: un diccionario similar al usado en CGI y un
callback (reponse) para las cabeceras de respuesta. Como retorno, se
devuelve un iterable que genera el "body" de la página.

Así de corrido, podría ser similar a ésto:

import cgi
def app(environ, start_response):    form =
cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ)

    response_body = [' ... ']
    ....

    response_headers = [
        ('Content-Type', 'text/plain'),
        ('Content-Length', str(len(response_body)))
    ]

    start_response('200 OK', response_headers)
    for line in response_body:

        yield line

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(app).run()

En la documentación oficial tienes un howto con un apartado que te explica
cómo ejecutar una aplicación wsgi con fastcgi:
https://docs.python.org/3.5/howto/webservers.html#fastcgi-and-scgi


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20160915/aedd7d1e/attachment.html>


Más información sobre la lista de distribución Python-es