私は最初のFlaskアプリケーションを構築しています。私は、アプリケーションを整理するための良い、きれいなPythonの方法を理解できません。 例のようにすべてのものを単一の.pyファイルに収めたくないのですが。 アプリの各部分を別々のモジュールにまとめたいと思います。 物を整理するにはどうすればよいでしょうか?比較的大きなFlaskアプリケーションをどのように編成するのですか?
答えて
私は「Fbone」と呼ばれるフラスコ定型プロジェクトを作成して、それをチェックアウトして自由とフォーク気軽にどうぞ:)
Fbone(フラスコの骨)をフラスコ(Pythonのマイクロフレーム)テンプレート/ストラップ/定型アプリケーションです。まあ青写真を使用して大きなプロジェクトのために設計され
概要
- 。
- 最新のフロントエンドフレームワークと統合:jQuery/html5boilerplate/bootstrap
- 有名なSQLalchemyの支援を受けています。
- フラスコログインによってトリッキーな "私を覚えてください"を実装します。
- フラスコ重量のハンドルフォーム。
- フラスコ試験および鼻による単位試験。
- ファブリックとmod_wsgi(例を含む)を使用して簡単にデプロイします。フラスコ・バベルによって
- 国際化が
ところで、私はちょうど便利フラスコを持つ大規模なプロジェクトを構築する上で、このwikiを見つけ、plsはそれをチェック!
すごい定型会、いい仕事! –
本当にこれが好きです。ありがとうございました! – jdsantiagojr
READMEに詳述されているように 'fab d'を実行する前に、 'source env/bin/activate'で仮想環境をアクティブにする必要があります – JRG
フラスコ0.7は、Blueprintsを実装しています。それらは、メインアプリケーションオブジェクトをインポートせずにroute
デコレータを使用するのに最適です。
青写真とモジュールとの違いは? – dcolish
技術的には、青写真はBlueprintクラスのインスタンスです。 1つまたは複数のモジュールにまたがることができます。また、同じモジュールで複数の設計図が共存することもあります。場面の裏には、テンプレートと静的フォルダを見つけるための青写真のモジュールやパッケージを理解する魔法がいくつかあります。 –
私のフラスコ骨プロジェクトに青写真を統合しました。私の答えplsを見てください。 – imwilsonxu
私の(私の基準で)大きなFlaskプロジェクト(5000行のPythonコードで、半分しか完成していません)に取り組んでいます。顧客は、プロジェクトはモジュラーになりたいので、私はこのapporachを取っ:
マイフォルダ構造は次のようになります。modules.yml
で
├── __init__.py
├── modules.yml
├── config
├── controllers
│ └── ...
├── lib: Common functions I use often
│ └── ...
├── models
│ └── ...
├── static: All static files
│ ├── css
│ ├── img
│ └── js
└── templates: Jinja2 templates
└── ...
私は名前やURLなど、私のモジュールを定義します。この方法で、顧客は単一のPythonファイルに触れることなくモジュールを有効/無効にすることができます。さらに、モジュールリストに基づいてメニューを生成します。慣例として、すべてのモジュールにはという独自のPythonモジュールがあり、model
をmodels/
からロードします。すべてのコントローラはコントローラの名前としてBlueprint
を格納しています。例えば。 user
モジュールのために、私はcontrollers/user.py
を持っている:
# Module name is 'user', thus save Blueprint as 'user' variable
user = Blueprint('user', __name__)
@user.route('/user/')
def index():
pass
この道を、私は私の__init__.py
と負荷にmodules.yml
を読み込み、動的にすべて対応モジュールを登録することができます
# Import modules
for module in modules:
# Get module name from 'url' setting, exculde leading slash
modname = module['url'][1:]
try:
# from project.controllers.<modname> import <modname>
mod = __import__(
'project.controllers.' + modname, None, None, modname
)
except Exception as e:
# Log exceptions here
# [...]
mod = getattr(mod, modname) # Get blueprint from module
app.register_blueprint(mod, url_prefix=module['url'])
私は願って、これをすることができあなたのためのいくつかのインスピレーション:
マット・ライトのwonderful postを必ず読んでください。
ポスト機能:
大きなフラスコプロジェクト
一般的には最高のデザインの実践の記述のための構造の説明、それが大になりますMVCパターン、Appファクトリ、サービス、データマイグレーションのようなWebアプリケーション(ほとんどの興味深い機能IMHO)があります。
私は最初からフラスコアプリyapperを作成し、フロントエンドとバックエンドの開発の両方のための一口でそれを統合しています。 これは簡単なブログエンジンですが、要件に応じて開発するために簡単に変更できます。それは青写真を使ってうまく構成されています。
チェックアウトプロジェクトページyapper
私はフラスコの上に構築されたソーシャルネットワーク上で働いていました。私のプロジェクトに関する特別なことは、サーバーが純粋にAPIエンドポイントを提供しており、フロントエンドが1ページのバックボーンアプリだということでした。私が撮ったフラスコ構造は以下の通りです:
├── app │ ├── api
│ │ ├── auth.py │ │ └── ... │ ├── app.py │ ├── common │ │ ├── constants.py │ │ ├── helpers.py │ │ ├── response.py │ │ └── ... │ ├── config.py │ ├── extensions.py │ ├── frontend │ │ └── controllers.py │ ├── static │ │ └── ... │ ├── templates │ │ ├── app.html │ │ └── ... │ └── users │ ├── UserConstants.py │ ├── UserForms.py │ ├── UserHelpers.py │ ├── UserModels.py │ └── __init__.py ├── alembic | ├── version │ └── ... ├── tests │ └── ...
あなたは、私が話題hereに書いた、より詳細な記事を読むことができます。私はそれがはるかに直感的な独自のフォルダに別の機能領域を分離することがわかった。
私はしばらく前にコードに取り組み、オープンソース化しました。あなたはそれを確認することができますon github。
ありがとうございます。いい感じ。 – daniels
- 1. 比較的大きい(〜20MB)APKサイズは、どのユーザーもアプリをインストールできないようにしますか?
- 2. 比較的大きなBluetoothネットワーク
- 3. Array.findとforeachなどのイテレータをどのように比較できますか?
- 4. 複雑なCocoaアプリケーションをどのように編成するのですか?
- 5. UIPickerViewでどのように比較できますか?
- 6. 大きなMySQLテーブルを比較する
- 7. 挿入比較#が大きすぎるようです
- 8. DATEADD - どのように比較するのですか
- 9. 2つの大きなテキストファイルの効率的なファイル比較
- 10. どのようにして迅速な2つの一般的なリンクリストを比較できますか?
- 11. ARMのsssemblyで前のcmpと比較してbne分岐をどのように比較できますか?
- 12. C#でオブジェクトの2つの大きなリストのプロパティを効率的に比較するにはどうすればよいですか?
- 13. SqlCommandと比較するにはどのように追加できますか?
- 14. 比較的大規模なアプリケーションでEntity Managerを使用してデータベーストランザクションをどのように管理する必要がありますか?
- 15. SQLで2つの大きなテーブルを比較する
- 16. PowerShellで2つの大きなテキスト配列を比較する
- 17. 文字列の比較。どのようにstd :: wstringと文字列を比較できますか? WRT strcmp
- 18. C#Viewbagの値をJavascriptでどのように比較できますか?
- 19. どのように相互排他的な比較を事前に決定するのですか?
- 20. データベースとのデータの比較はどのようにですか?
- 21. 2つの.netコンソールアプリケーションの全体的なパフォーマンスを比較するにはどうすればよいですか?
- 22. 共有ミューテックスは比較的大きな構造体のアトミックよりも効率的ですか?
- 23. C#Linq - どのようにフィルタ自体を比較できないかを
- 24. Coredata EntityのZ_PKとどのような値を比較するのですか?
- 25. 大きい数字を比較する
- 26. 大きいxmlファイルを比較する
- 27. char *が他の文字列/数値よりも大きいかどうかを比較するには?
- 28. 2つのSQLiteファイルをどのように比較できますか?
- 29. どのように変数をPowerShellの配列と比較できますか?
- 30. (Jagged Arrays、Arrays、ArrayList)のパフォーマンスをどのように比較できますか?
ここで説明されているレイアウトはかなり好きです:http://flask.pocoo.org/docs/patterns/packages/ – obmarg
ここでは、私が避けたい円形のインポートを使用しています。 – daniels
trueですが、app.routeデコレータを使いたい場合は避けられないと思います。 – obmarg