python google-app-engine flask webapp2

python - Flask vs webapp2 para Google App Engine



google-app-engine (5)

Creo que el motor de aplicaciones de Google es compatible oficialmente con el framework de matraces. Hay un código de muestra y un tutorial aquí -> https://console.developers.google.com/start/appengine?_ga=1.36257892.596387946.1427891855

Estoy comenzando una nueva aplicación de Google App Engine y actualmente estoy considerando dos marcos: Flask y webapp2 . Estoy bastante satisfecho con el framework webapp incorporado que he usado para mi aplicación anterior de App Engine, así que creo que webapp2 será aún mejor y no tendré ningún problema con él.

Sin embargo, hay muchas buenas críticas de Flask, realmente me gusta su enfoque y todas las cosas que he leído hasta ahora en la documentación y quiero probarlo. Pero estoy un poco preocupado por las limitaciones que puedo enfrentar en el camino con Flask.

Entonces, la pregunta es: ¿conoces algún problema, problemas de rendimiento, limitaciones (por ejemplo, sistema de enrutamiento, mecanismo de autorización integrado, etc.) que Flask pueda incorporar a la aplicación Google App Engine? Por "problema" me refiero a algo que no puedo evitar en varias líneas de código (o cualquier cantidad razonable de código y esfuerzo) o algo que es completamente imposible.

Y como pregunta complementaria: ¿hay alguna característica de asesino en Flask que piense que puede hacerme estallar y hacer que lo use a pesar de cualquier problema que pueda enfrentar?


No probé con webapp2 y encontré que el tipfy era un poco difícil de usar, ya que requería scripts de instalación y compilaciones que configuraban la instalación de python en una configuración diferente a la predeterminada. Por estas y otras razones, no he hecho que mi proyecto más grande dependa de un marco y utilizo la aplicación web simple, agregué la biblioteca llamada vaso de precipitados para obtener la capacidad de sesión y django ya tiene traducciones integradas para palabras comunes a muchos usos, así que al construir un aplicación localizada django fue la elección correcta para mi proyecto más grande. Los otros dos marcos que implementé con proyectos en un entorno de producción fueron GAEframework.com y web2py y, en general, parece que agregar un marco que modifique su motor de plantilla podría generar incompatibilidades entre versiones antiguas y nuevas.

Así que mi experiencia es que estoy siendo reacio a agregar un marco a mis proyectos a menos que resuelvan los casos de uso más avanzados (carga de archivos, autenticación múltiple, administración son 3 ejemplos de casos de uso más avanzados que no tienen marco para Gae en este momento maneja bien.


Para mí, la decisión para webapp2 fue fácil cuando descubrí que el matraz no es un marco orientado a objetos (desde el principio), mientras que webapp2 es un marco orientado a objetos puros. webapp2 utiliza el envío basado en el método como estándar para todos los RequestHandlers (a medida que la documentación del matraz lo llama y lo implementa desde V0.7 en MethodViews). Mientras que en el matraz MethodViews son un complemento, es un principio de diseño central para webapp2. Entonces, su diseño de software se verá diferente usando ambos marcos. Ambos marcos usan hoy en día plantillas jinja2 y son bastante características idénticas.

Prefiero agregar controles de seguridad a un RequestHandler de clase base y heredar de él. Esto también es bueno para las funciones de utilidad, etc. Como puede ver, por ejemplo, en el enlace [3], puede anular los métodos para evitar el envío de una solicitud.

Si eres una persona OO, o si necesitas diseñar un servidor REST, te recomendaría webapp2. Si prefiere funciones simples con decoradores como controladores para múltiples tipos de solicitud, o si no se siente cómodo con la herencia OO, elija el matraz. Creo que ambos marcos evitan la complejidad y las dependencias de marcos mucho más grandes como la pirámide.

  1. http://flask.pocoo.org/docs/0.10/views/#method-based-dispatching
  2. https://webapp-improved.appspot.com/guide/handlers.html
  3. https://webapp-improved.appspot.com/guide/handlers.html#overriding-dispatch

Su pregunta es extremadamente amplia, pero parece que no hay grandes problemas al utilizar Flask en Google App Engine.

Este hilo de la lista de correo enlaza a varias plantillas:

http://flask.pocoo.org/mailinglist/archive/2011/3/27/google-app-engine/#4f95bab1627a24922c60ad1d0a0a8e44

Y aquí hay un tutorial específico para la combinación de Flask / App Engine:

http://www.franciscosouza.com/2010/08/flying-with-flask-on-google-app-engine/

Además, consulte App Engine - Dificultad para acceder a datos de Twitter - Flask , el mensaje del Flask falla al redireccionar y ¿Cómo administro bibliotecas de Python de terceros con Google App Engine? (virtualenv? pip?) para los problemas que las personas han tenido con Flask y Google App Engine.


Descargo de responsabilidad: soy el autor de tipfy y webapp2.

Una gran ventaja de seguir con webapp (o su evolución natural, webapp2) es que no tiene que crear sus propias versiones para los manejadores de SDK existentes para su marco de trabajo de su elección.

Por ejemplo, deferred usa un manejador de webapp. Para usarlo en una vista de matraz puro, usando werkzeug.Request y werkzeug.Response, deberá implementar la opción diferida (como hice here para obtener información).

Lo mismo ocurre con otros manejadores: blobstore (Werkzeug aún no admite solicitudes de rango, por lo que necesitará usar WebOb incluso si crea su propio controlador - vea tipfy.appengine.blobstore ), correo, XMPP, etc. u otros que están incluidos en el SDK en el futuro.

Y lo mismo ocurre con las bibliotecas creadas con App Engine en mente, como ProtoRPC , que se basa en webapp y necesitaría un puerto o adaptador para trabajar con otros frameworks, si no quiere mezclar webapp y su-framework-of- manejadores de opciones en la misma aplicación.

Entonces, incluso si elige un marco diferente, terminará a) usando la aplicación web en algunos casos especiales ob) teniendo que crear y mantener sus versiones para manejadores o características del SDK específicos, si los va a usar.

Yo prefiero Werkzeug a través de WebOb, pero después de más de un año portando y manteniendo versiones de los manejadores de SDK que funcionan de forma nativa con tipfy, me di cuenta de que esta es una causa perdida: para soportar GAE a largo plazo, lo mejor es mantenerse cerca de webapp / WebOb. Hace que la compatibilidad con bibliotecas SDK sea sencilla, el mantenimiento se vuelve mucho más fácil, es más a prueba de futuro ya que las nuevas bibliotecas y características de SDK funcionarán de la caja y existe el beneficio de una gran comunidad que trabaja con las mismas herramientas de App Engine.

Aquí se resume una defensa de webapp2 específica. Agregue a los que webapp2 se puede usar fuera de App Engine y es fácil personalizarlo para que parezca microarmas populares y tiene un buen conjunto de razones convincentes para hacerlo. Además, webapp2 tiene una gran oportunidad de ser incluido en un futuro lanzamiento de SDK (esto es extraoficial, no me cites :-) que lo impulsará y traerá nuevos desarrolladores y contribuciones.

Dicho esto, soy un gran admirador de Werkzeug y los chicos de Pocoo y me prestaron mucho de Flask y otros (web.py, Tornado), pero, y sé que soy parcial, los beneficios anteriores de webapp2 deberían ser tomado en cuenta.