117

私は新しい Google App Engine アプリケーションを開始しており、現在Flaskwebapp2の 2 つのフレームワークを検討しています。以前の App Engine アプリケーションで使用した組み込みの webapp フレームワークにはかなり満足しているので、webapp2 はさらに優れていると思います。問題はありません。

しかし、Flask には良いレビューがたくさんあります。私はそのアプローチと、これまでにドキュメントで読んだすべてのことを本当に気に入っています。試してみたいと思っています。しかし、Flask で今後直面する可能性のある制限について少し心配しています。

質問は、Flask が Google App Engine アプリケーションに持ち込む可能性のある問題、パフォーマンスの問題、制限 (例: ルーティング システム、組み込みの承認メカニズムなど) を知っていますか? 「問題」とは、数行のコード (または妥当な量のコードと労力) で回避できないこと、または完全に不可能なことを意味します。

フォローアップの質問として、Flask には、直面する可能性のある問題にもかかわらず、私の心を吹き飛ばし、それを使用させることができると思われるキラー機能はありますか?

4

5 に答える 5

137

免責事項:私は、tipfy と webapp2 の作成者です。

webapp (またはその自然な進化である webapp2) に固執することの大きな利点は、選択したフレームワーク用の既存の SDK ハンドラー用に独自のバージョンを作成する必要がないことです。

たとえば、deferredは webapp ハンドラーを使用します。werkzeug.Request と werkzeug.Response を使用して純粋な Flask ビューで使用するには、deferred を実装する必要があります (ここで tipfy で行ったように)。

他のハンドラーでも同じことが起こります: blobstore (Werkzeug はまだ範囲要求をサポートしていないため、独自のハンドラーを作成する場合でも WebOb を使用する必要があります -- tipfy.appengine.blobstoreを参照してください)、メール、XMPP など。または、将来 SDK に含まれるその他のもの。

ProtoRPCなど、App Engine を念頭に置いて作成されたライブラリでも同じことが起こります。これは webapp に基づいており、webapp と your-framework-of- を混在させたくない場合は、他のフレームワークと連携するためにポートまたはアダプターが必要です。同じアプリ内の選択ハンドラー。

したがって、別のフレームワークを選択したとしても、a) いくつかの特別なケースで webapp を使用するか、b) 特定の SDK ハンドラーまたは機能を使用する場合は、それらのバージョンを作成して維持する必要がなくなります。

私は WebOb よりも Werkzeug を好みますが、tipfy でネイティブに動作する SDK ハンドラーのバージョンを 1 年以上移植して維持した後、これは失われた原因であることに気付きました。 webapp/WebOb. SDK ライブラリのサポートが簡単になり、メンテナンスがはるかに簡単になり、新しいライブラリと SDK 機能がすぐに使用できるようになるため、将来性が高まります。また、同じ App Engine ツールを使用する大規模なコミュニティの利点もあります。

具体的な webapp2 防御については、こちらにまとめられています。さらに、webapp2 は App Engine の外部で使用でき、一般的なマイクロ フレームワークのように簡単にカスタマイズできます。これを使用する説得力のある理由がいくつかあります。また、webapp2 は、将来の SDK リリースに含まれる大きなチャンスがあります (これは非常に公式なものです。引用しないでください :-)。これにより、webapp2 は前進し、新しい開発者と貢献がもたらされます。

そうは言っても、私は Werkzeug と Pocoo の大ファンであり、Flask やその他 (web.py、Tornado) から多くのものを借りてきましたが、- そして、私には偏見があります- 上記の webapp2 の利点は、考慮する必要があります。

于 2011-07-22T07:07:49.547 に答える
13

あなたの質問は非常に幅広いですが、GoogleAppEngineでFlaskを使用しても大きな問題はないようです。

このメーリングリストのスレッドは、いくつかのテンプレートにリンクしています。

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

そして、Flask /AppEngineの組み合わせに固有のチュートリアルは次のとおりです。

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

また、App Engine-Twitterデータへのアクセスの難しさ-Flask 、Flaskメッセージのフラッシュがリダイレクト間で失敗する、およびGoogleAppEngineでサードパーティのPythonライブラリを管理するにはどうすればよいですか。(virtualenv?pip?) FlaskとGoogleAppEngineで発生した問題。

于 2011-07-21T11:09:33.103 に答える
3

私にとって、webapp2 は純粋なオブジェクト指向フレームワークであるのに対し、flask は (最初から) オブジェクト指向フレームワークではないことを発見したとき、webapp2 の決定は簡単でした。webapp2 は、メソッド ベースのディスパッチをすべての RequestHandler の標準として使用します (フラスコのドキュメントがそれを呼び出し、V0.7 以降で MethodViews に実装しているため)。フラスコの MethodViews はアドオンですが、webapp2 のコア設計原則です。したがって、両方のフレームワークを使用すると、ソフトウェア設計が異なって見えます。どちらのフレームワークも現在は jinja2 テンプレートを使用しており、機能はまったく同じです。

基本クラスの RequestHandler にセキュリティ チェックを追加し、それを継承することを好みます。これは、ユーティリティ関数などにも適しています。たとえば、リンク [3] でわかるように、メソッドをオーバーライドして、リクエストのディスパッチを防ぐことができます。

あなたが OO の人である場合、または REST サーバーを設計する必要がある場合は、webapp2 をお勧めします。複数のリクエスト タイプのハンドラーとしてデコレーターを使用する単純な関数を好む場合、または OO 継承に不安がある場合は、flask を選択してください。どちらのフレームワークも、ピラミッドのようなはるかに大きなフレームワークの複雑さと依存関係を回避していると思います。

  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
于 2015-09-06T16:19:26.637 に答える
2

私は webapp2 を試しませんでしたが、tipfy はセットアップ スクリプトと Python のインストールをデフォルト以外に設定するビルドが必要なため、少し使いにくいことがわかりました。これらの理由やその他の理由から、私は最大のプロジェクトをフレームワークに依存させず、代わりにプレーンな webapp を使用し、beaker というライブラリを追加してセッション機能を取得し、django には多くのユースケースに共通する単語の翻訳が既に組み込まれているため、ローカライズされたアプリケーション django は、私の最大のプロジェクトにとって正しい選択でした。プロジェクトと共に本番環境に実際に展開した他の 2 つのフレームワークは、GAEframework.com と web2py でした。一般に、テンプレート エンジンを変更するフレームワークを追加すると、古いバージョンと新しいバージョンの間で互換性がなくなる可能性があるようです。

したがって、私の経験では、より高度なユースケースを解決しない限り、プロジェクトにフレームワークを追加することに消極的です (ファイルアップロード、マルチ認証、管理 UI は、現時点でゲーのフレームワークがないより高度なユースケースの 3 つの例です)。よく扱います。

于 2011-07-23T08:11:10.340 に答える
2

Google App Engine は正式にフラスコ フレームワークをサポートしていると思います。ここにサンプル コードとチュートリアルがあります -> https://console.developers.google.com/start/appengine?_ga=1.36257892.596387946.1427891855

于 2015-04-03T06:09:17.253 に答える