sintaxis - ¿Cómo uso Python para el desarrollo web sin depender de un marco?
que es python y para que sirve (10)
¿Por qué le preocupa el rendimiento de web.py? Como mencioné here , usamos CherryPy (el servidor web "integrado en" web.py) detrás de nginx para servir la mayoría del HTML en Oyster.com - nginx divide el tráfico en 2 o 3 servidores web, cada uno de los cuales ejecuta 4 procesos Python, y podemos manejar fácilmente cientos de solicitudes por segundo.
Oyster.com es un sitio web de gran volumen con un promedio de 200,000 visitas de página / día generadas dinámicamente, y que alcanza un número mucho mayor que eso. Sin embargo, utilizamos una red de entrega de contenido (CDN) para nuestros recursos estáticos como imágenes y CSS.
Definitivamente nos preocupamos por el rendimiento (la mayoría de nuestras páginas se procesan en menos de 25 ms), pero web.py no es el cuello de botella. Nuestros cuellos de botella son el procesamiento de plantillas (usamos Cheetah , que es lo suficientemente rápido pero no el otro del mundo) y las consultas de la base de datos (almacenamos en caché y mantenemos el número de consultas de la base de datos por página a 0 o 1) y accedemos a nuestros precios de hoteles de terceros. proveedores (se accede a ellos cuando realiza una búsqueda con fechas que aún no tenemos en caché).
Recuerde, la optimización prematura es la raíz de todo mal, a menos que esté sirviendo google.com, web.py probablemente funcionará para usted.
Sé que los distintos marcos tienen sus beneficios, pero personalmente quiero que mi desarrollo web en python sea lo más sencillo posible: menos escritura en el marco, más escritura en python .
Lo único que he encontrado hasta ahora que me permite hacer esto de la manera más obvia posible es web.py pero tengo algunas dudas sobre su rendimiento.
Para aquellos de ustedes que usan nginx (u otro sabor) + mod_wsgi + web.py ... ¿cómo está el rendimiento? ¿Se puede mejorar aún más?
Para aquellos de ustedes que han usado web.py, les gustó la idea y escribieron algo mejor o encontraron algo mejor ... ¿me importaría señalar la fuente?
Me gustaría conocer todos los enfoques conspicuos, mínimos pero poderosos.
¿Qué pasa con Django? No te obliga a usar su ORM y los controladores son simples funciones de Python en lugar de métodos de clase similares a Rails. Además, el enrutamiento de URL se realiza con expresiones regulares en lugar de otra sintaxis inventada por el marco. Si django parece demasiado para ti de todos modos, te recomiendo echar un vistazo a werkzeug
+1 a todas las respuestas con WSGI.
Eric Florenzo escribió una excelente publicación en el blog últimamente que deberías leer: Escribiendo Blazing Fast, Infinitely Scale, Pure-WSGI Utilities . Esto te dará una mejor idea de WSGI puro más allá de Hello World. También preste atención a los comentarios, especialmente el primer comentario de Kevin Dangoor donde recomienda al menos agregar WebOb a su conjunto de herramientas.
Creo que depende de la definición de qué es un marco y de lo que debería hacer por usted.
Como se señaló, un "marco" mínimo sería WSGI, ya que solo define una pequeña interfaz para interactuar con un servidor web. Pero es un enfoque poderoso debido al middleware que puede colocar entre su aplicación y el servidor.
Si desea algo más, como algunas URL para la asignación de funciones, entonces tiene algunas opciones, algunas de las cuales ya se han mencionado.
Si vas más lejos, podrías llegar a Pylons o Turbogears o Django, después de eso, tal vez Zope, pero crezca y tal vez el dolor, así como siempre adquieras las opiniones de ese marco.
Lo que recientemente uso más y más (proveniente de Zope / Plone) es repoze.bfg . Es muy pequeño, no viene con un paquete ORM (por lo que puede usar SQLAlchemy, Storm o simplemente ir a una base de datos de objetos como el ZODB ). Lo que hace es, básicamente, manejar la forma en que se obtiene de una URL a una vista que es una función. Admite tanto el mapeo de URL (a la Rutas) como el recorrido de objetos, que IMHO es muy poderoso en algunas circunstancias esp. Si tienes un mapeo no tan estricto. Lo bueno es que viene directamente con un marco de seguridad basado en ACL que puede usar si desea que IMHO sea muy práctico. De esa manera no necesitas decoradores que parecen ser usados principalmente para tales cosas.
Y por supuesto está basado en WSGI. También busque el repositorio de subversión de repoze para un montón de middleware y el material Pegar también es muy útil para las tareas relacionadas con WSGI.
El camino por recorrer es wsgi .
WSGI es la interfaz de puerta de enlace del servidor web . Es una especificación para que los servidores web y los servidores de aplicaciones se comuniquen con las aplicaciones web (aunque también se puede utilizar para más que eso). Es un estándar de Python, que se describe en detalle en PEP 333 .
Todos los frameworks actuales soportan wsgi. Muchos servidores web también lo admiten (se incluye apache, a través de mod_wsgi ). Es el camino a seguir si desea escribir su propio marco.
Aquí está hola mundo, escrito a wsgi directamente:
def application(environ, start_response):
status = ''200 OK''
response_headers = [(''Content-type'',''text/plain'')]
start_response(status, response_headers)
return [''Hello world!/n'']
Coloca esto en un file.py
, apunta a tu configuración apache mod_wsgi
y se ejecutará. Pitón puro. No hay importaciones. Sólo una función de python.
Si realmente está escribiendo su propio marco, puede comprobar werkzeug . No es un marco, sino una simple colección de varias utilidades para aplicaciones WSGI y se ha convertido en uno de los módulos de utilidades WSGI más avanzados. Incluye un potente depurador, objetos de solicitud y respuesta con todas las funciones, utilidades HTTP para manejar etiquetas de entidad, encabezados de control de caché, fechas HTTP, manejo de cookies, carga de archivos, un potente sistema de enrutamiento de URL y un montón de módulos complementarios aportados por la comunidad. Toma la parte aburrida de tus manos.
Es gracioso cómo, incluso con una pregunta que pregunta cómo escribir sin un marco, todos se amontonan para promover su marco favorito. El OP se queja de no querer un "marco de peso pesado", y las respuestas mencionan Twisted , de todas las cosas? Ven ahora, de verdad.
Sí, es perfectamente posible escribir aplicaciones WSGI directas y capturar partes de la funcionalidad deseada de módulos independientes, en lugar de ajustar su código en la vista del mundo de un marco particular.
Para tomar esta ruta, generalmente querrás estar familiarizado con los conceptos básicos de HTTP y CGI (ya que WSGI hereda una gran cantidad de esa especificación anterior). No es necesariamente un enfoque para recomendar a los principiantes, pero es bastante factible.
Me gustaría escuchar acerca de todos los enfoques conspicuos, mínimos pero poderosos
No escuchará sobre ellos, porque nadie tiene un interés tribal en promover "hágalo usted mismo" como metodología. Yo, yo uso un paquete de plantillas independiente particular, un paquete de lectura de formas independiente particular, una capa de acceso a datos particular y unos pocos módulos de utilidad de elaboración casera. No escribo sobre una filosofía en particular sobre la que pueda hacer proselitismo, son simplemente herramientas aburridas que podrían intercambiarse y reemplazarse con otra cosa tan buena.
He escrito algunas aplicaciones web pequeñas usando mod-python y PSP - mod-python equivalente a php.
En un caso, escribí una página web que genera notas de lanzamiento al inspeccionar nuestro repositorio de código fuente. Lo reescribí en PHP y me sorprendió descubrir que la versión de PSP era aproximadamente un 20% más rápida, además de tener la mitad de líneas de código.
Entonces, para problemas pequeños, al menos, la psp me ha funcionado bien.
Para lo que vale, escribí mi sitio web en mod_python sin ningún marco intermedio como Django. Realmente no tenía ninguna razón para quejarme. (Bueno, tal vez un poco, mod_python es algo peculiar de algunas maneras, pero no en los casos de uso más comunes) Una cosa es segura, definitivamente te permitirá escribir Python ;-)
Soy bastante aficionado a Google AppEngine. Utilizo el ORM y el sistema de plantillas, pero por lo demás, sigo un diseño con patrón REST y simplemente implemento los métodos de Python para los correspondientes HTTP. Hace que la interacción HTTP sin procesar sea central y, opcionalmente, le ofrece otras cosas para usar. ¡Además, ya no tendrá que configurar y administrar su entorno de implementación!
También puedes comprobar cherrypy . El enfoque de cherrypy está en ser un marco que te permite escribir python. Cherrypy tiene su propio servidor web bastante bueno, pero es compatible con wsgi, por lo que puede ejecutar aplicaciones cherrypy en apache a través de mod_wsgi. Aquí está hola mundo en cherrypy:
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())