Pregunta

Soy un ex desarrollador de PHP y estoy luchando por superar la mentalidad de que puedo escribir un script de configuración Nginx, crear los directorios, encender Nginx + Php-FPM, subir mi código y dejarlo ejecutar. Quiero comenzar a jugar con Python para tener una idea de ello y comenzar a crear aplicaciones web, pero estoy un poco perdido sobre cómo hacer que todo funcione.

Aunque el consejo de algunas personas invariablemente será usar un marco como Django, quiero ver cómo funciona todo esto de abajo hacia arriba.

Me he encontrado con una comparación de los servidores web de Python, y parece que Gevent es lo que estoy buscando. Pero, ¿cómo encaja todo? ¿Todavía necesito NGINX (excepto el contenido estático) como un proxy inverso, o hago algo diferente? Me enfrento a la "ceguera para principiantes" y estoy luchando por ver cómo encaja todo.

¿Fue útil?

Solución

Yo mismo soy un desarrollador principiante de Python, así que he tenido las mismas preguntas. Quizás un usuario más avanzado puede completar los detalles. Esto es lo que he hecho hasta ahora:

La forma más sencilla de comenzar es simplemente hacer un script de Python ejecutable (.py) y dejarlo en su cgi-bin. Luego puede acceder a él a través de yourhost.com/cgi-bin/your_script.py. Fácil de hacer, fácil de usar para el procesamiento de formularios y esas cosas.

Algunos servidores requerirán que reinicie el servidor antes de que pueda 'ver' el nuevo script .py, lo que podría ser bastante molesto para un desarrollo rápido. Esta es una de las razones por las cuales muchas personas usan middleware como WSGI. Así es como modifiqué mi configuración Apache para habilitar WSGI:

LoadModule wsgi_module libexec/apache2/mod_wsgi.so

<VirtualHost *:80>

WSGIScriptAlias /myapp /Library/WebServer/wsgi-scripts/views.wsgi

<Directory /Library/WebServer/wsgi-scripts>
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

Views.wsgi es simplemente un guión de Python. Ahora, si voy a localhost/myapp/cualquier cosa, redirigirá a verss.wsgi. Es una buena idea no poner este archivo en su directorio raíz, de lo contrario no podrá hacer referencia a archivos estáticos.

Una aplicación simple simplemente puede verse así:

def application(environ, start_response):
    start_response('200 OK', [('content-type', 'text/html')])
    return ['Hello world!']

Environ contiene información sobre la ruta a la que el usuario está tratando de alcanzar, por lo que la idea es que puede configurar una lista de URL y decirle a su programa qué función de llamar en función de qué URL se solicitó. Algo como esto:

 path      = environ.get('PATH_INFO','')
 if path.startswith('/helloworld'):
  # call your function that returns HTML code

Todavía no he tratado mucho con marcos (como Django), pero creo que una de las ventajas allí es que facilitan completar las plantillas HTML usando cualquier variable que se pase de su script. El motor de plantilla de Django permite que incluya variables, así como la lógica (si, para, etc.) entremezclada con su HTML. Cuando se llama a la función, lo que devuelva se envía al cliente.

Todavía soy bastante nuevo en todo esto, así que corríjeme si hay algún error aquí ...

Otros consejos

Es un poco diferente con Python que con PHP. Algo bueno de Python, que una interfaz común se define en un estándar que le permite a uno usar varias aplicaciones de Python en un lado y diferentes servidores web en el otro. Se llama wsgi, y puedes leer más al respecto aquí

Y aquí es una buena publicación sobre la implementación de la aplicación Django a través de NGNIX.

Necesita algún software que ejecute su código Pyton.

Puedes probar una pit de 100% con Python con tornado

O puede usar Apache, Nginx o LightTPD (creo que todo escrito en C) y luego usar algún mod (MOD_WSGI, FGCI o UWSGI) para que este servidor web ejecute su código usando WSGI interfaz. Esta segunda opción es como lo que hace Apache+Some_Mod para ejecutar su código PHP.

Tengo sitios de producción que se ejecutan en apache+mod_wsgi y nginx+uwsgi

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top