Flask を使用する場合、すべてのメソッド定義を 1 つのファイルに含めることが義務付けられています。これは、一部のメソッド定義を別のファイルに移動しようとしているが、404 が見つからないというエラーが発生するためです。
3 に答える
1 つのファイルですべてを定義する必要はありません。これは、より大きなアプリでは非常に悪いことです:)公式の短いドキュメントを読んで、そこにある提案を参照してください(これには、前の回答で言及されたブループリントが含まれており、大きなアプリを整理するのに本当に良い方法です)。
また、より大きなアプリを整理して作成する方法についての素晴らしいサンプルアプリもあります。こちらも参考になります(;_;)
また、他のメソッド、クラス、および Flask 固有ではないすべてのものは単純な Python であるため、それらを 1 つのファイルに含める必要もありません。
Flask で提案されているように、ブループリントを使用してより大きなアプリケーションを実行できます。互いに結合しすぎないモジュラー アプリケーションを作成するアプローチが気に入っています。そのため、ほとんどの部分でルーティングや before_request などのアプリ機能を備えたブループリントを作成します。
simple_page = Blueprint('simple',__name__,template_folder='templates')
@simple_page.route('/', defaults={'page': 'index'})
@simple_page.route('/<page>')
def show(page):
try:
return render_template('pages/%s.html' % page)
except TemplateNotFound:
abort(404)
次に、それを登録します。
app = Flask(__name__)
app.register_blueprint(simple_page)
設計図に関する注意点:
- ブループリントはアプリではありません。そのように動作することを期待しないでください。
- ブループリントは独自のテンプレート フォルダーを定義できます。これは、特定のテンプレートを作成し、各ブループリントのフォルダー モジュールごとにアプリを並べ替えるのに便利です。
必ず「.」を追加することを忘れないでください。リソースを取得しようとするとき:
url_for('.index') #フラスコアプリ用
url_for('.index') #ブループリント用
ブループリントは、この回答を書いている時点で Flask のかなり新しいソリューションであり、複数のフォルダー内のモジュラー アプリケーションに最適なソリューションであり、すべてのアプリで同じ Flask オブジェクトを共有します。