Flask vs webapp2 for Google App Engine Flask vs webapp2 for Google App Engine

我正在开始新的 GoogleAppEngine 应用程序,目前正在考虑两个框架: 酒瓶Webapp2。我相当满意内置的 webapp 框架,我已经用在我以前的 App Engine 应用程序,所以我认为 webapp2会更好,我不会有任何问题。

然而,有很多关于 Flask 的好评,我真的很喜欢它的方法,以及到目前为止我在文档中读到的所有东西,我想尝试一下。但是我有点担心我和 Flask 一起面对的局限性。

So, the question is - 你是否知道 Flask 会给 Google App Engine 应用程序带来什么问题、性能问题、限制(例如路由系统、内置授权机制等) ? By "problem" I mean something that I can't work around in several lines of code (or any reasonable amount of code and efforts) or something that is completely impossible.

作为一个后续问题: Flask 有没有什么杀手级的功能,你认为可以让我大吃一惊,并让我使用它,尽管我可以面对任何问题?

35266 次浏览

您的问题非常广泛,但是在 Google App Engine 上使用 Flask 似乎没有什么大问题。

This mailing list thread links to several templates:

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

And here is a tutorial specific to the Flask / App Engine combination:

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

另外,请参阅 App Engine-访问 Twitter 数据困难-烧瓶重定向时烧瓶消息闪烁失败如何使用 Google App Engine 管理第三方 Python 库,了解人们使用 Flask 和 Google App Engine 遇到的问题。

免责声明: 我是 tipfy 和 webapp2的作者。

坚持使用 webapp (或者它的自然演变,webapp2)的一个很大的优势是,您不必为自己选择的框架为现有的 SDK 处理程序创建自己的版本。

例如,deferred使用一个 webapp 处理程序。使用 werkzeug 在纯 Flask 视图中使用它。请求和沃克泽格。响应时,您需要为它实现延迟(就像我为 tipfy 实现 给你一样)。

其他处理程序也是如此: blobstore (Werkzeug 仍然不支持范围请求,所以即使您创建自己的处理程序——参见 tipfy.appengine.blobstore)、 mail、 XMPP 等等,或者将来包含在 SDK 中的其他处理程序,也需要使用 WebOb。

对于使用 App Engine 创建的库也是如此,比如 ProtoRPC,它基于 webapp,如果你不想在同一个应用中混合使用 webapp 和自己选择的框架处理程序,就需要一个端口或适配器来与其他框架协同工作。

所以,即使你选择了一个不同的框架,你也会结束 a)在某些特殊情况下使用 webapp 或 b)不得不为特定的 SDK 处理程序或特性创建和维护你的版本,如果你要使用它们的话。

我更喜欢 Werkzeug 而不是 WebOb,但是在移植和维护了一年多的版本的 SDK 处理程序,使其能够与 tipfy 本地工作之后,我意识到这是一个注定要失败的事业——长期支持 GAE,最好的办法就是与 webapp/WebOb 保持一致。它使得对 SDK 库的支持变得轻而易举,维护变得更加容易,因为新的库和 SDK 特性将开箱即用,而且大型社区使用相同的 App Engine 工具也有好处。

总结了一种特定的 webapp2防御方法 给你。加上那些 webapp2 can be used outside of App Engine和是 易于定制,看起来像流行的微框架,你有一套很好的令人信服的理由去它。同时,webapp2有很大的机会被包含在未来的 SDK 发行版中(这是非官方的,不要引用我的话: ——) ,这将推动它向前发展,带来新的开发人员和贡献。

也就是说,我是 Werkzeug 和 Pocoo 的忠实粉丝,从 Flask 和其他网站(web.py,Torado)借鉴了很多东西,但是——你知道,我有偏见——上述 webapp2的好处应该被考虑在内。

我没有尝试 webapp2,发现 tipfy 有点难用,因为它需要安装脚本和构建来配置您的 Python 安装,而不是默认的。由于这些以及其他原因,我没有让我最大的项目依赖于一个框架,而是使用普通的 webapp,添加一个名为 beaker 的库来获得会话功能,django 已经为许多用例中常见的单词提供了内置的翻译,所以当构建一个本地化的应用程序 django 是我最大项目的正确选择。我实际部署到生产环境中的另外两个框架是 gaeframework.com 和 web2py,通常情况下,添加一个改变其模板引擎的框架可能会导致新旧版本之间的不兼容性。

因此,我的经验是,我不愿意添加一个框架到我的项目,除非他们解决更高级的用例(文件上传,multi auth,admin ui 是3个例子,更高级的用例,目前没有框架藻处理得很好。

我认为谷歌应用程序引擎正式支持烧瓶框架,这里有一个示例代码和教程-> https://console.developers.google.com/start/appengine?_ga=1.36257892.596387946.1427891855

For me the decision for webapp2 was easy when I discovered that flask is not an object-oriented framework (from the beginning), while webapp2 is a pure object oriented framework. webapp2 uses Method Based Dispatching as standard for all RequestHandlers (as flask documentation calls it and implements it since V0.7 in MethodViews). While in flask MethodViews are an add-on it is a core design principle for webapp2. So your software design will look different using both frameworks. Both frameworks use nowadays jinja2 templates and are fairly feature identical.

我更喜欢将安全检查添加到基类 RequestHandler 并从中继承。这对于实用函数等也很有用。正如您可以在链接[3]中看到的例子,您可以覆盖方法以防止分派请求。

如果你是一个面向对象的人,或者如果你需要设计一个 REST 服务器,我会推荐 webapp2给你。如果您喜欢简单的函数,并且喜欢用装饰符作为多个请求类型的处理程序,或者您不喜欢 OO 继承,那么选择烧瓶。我认为这两个框架都避免了像金字塔这样更大的框架的复杂性和依赖性。

  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