アプリケーションのセットアップ—フラスコのドキュメント

提供:Dev Guides
< FlaskFlask/docs/1.0.x/tutorial/factory
移動先:案内検索

アプリケーションのセットアップ

Flaskアプリケーションは、Flaskクラスのインスタンスです。 構成やURLなど、アプリケーションに関するすべてがこのクラスに登録されます。

Flaskアプリケーションを作成する最も簡単な方法は、「Hello、World!」のように、コードの先頭にグローバルFlaskインスタンスを直接作成することです。 前のページで行った例。 これは単純で便利な場合もありますが、プロジェクトが大きくなるにつれて、いくつかのトリッキーな問題が発生する可能性があります。

Flaskインスタンスをグローバルに作成する代わりに、関数内に作成します。 この機能は、アプリケーションファクトリとして知られています。 アプリケーションに必要な構成、登録、およびその他のセットアップはすべて関数内で行われ、その後アプリケーションが返されます。

アプリケーションファクトリ

コーディングを開始する時が来ました! flaskrディレクトリを作成し、__init__.pyファイルを追加します。 __init__.pyは二重の役割を果たします。アプリケーションファクトリが含まれ、flaskrディレクトリをパッケージとして扱う必要があることをPythonに通知します。

mkdir flaskr

flaskr/__init__.py

import os

from flask import Flask


def create_app(test_config=None):
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY='dev',
        DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'),
    )

    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello
    @app.route('/hello')
    def hello():
        return 'Hello, World!'

    return app

create_appはアプリケーションファクトリ関数です。 チュートリアルの後半で追加しますが、すでに多くのことを行っています。

  1. app = Flask(__name__, instance_relative_config=True)は、Flaskインスタンスを作成します。
    • __name__は、現在のPythonモジュールの名前です。 アプリは、いくつかのパスを設定するためにそれがどこにあるかを知る必要があり、__name__はそれを伝えるための便利な方法です。
    • instance_relative_config=Trueは、構成ファイルがインスタンスフォルダーに関連していることをアプリに通知します。 インスタンスフォルダはflaskrパッケージの外部にあり、構成シークレットやデータベースファイルなど、バージョン管理にコミットしてはならないローカルデータを保持できます。
  2. app.config.from_mapping()は、アプリが使用するデフォルトの構成を設定します。
    • SECRET_KEY は、データを安全に保つためにFlaskおよび拡張機能によって使用されます。 開発中に便利な値を提供するために'dev'に設定されていますが、展開時にはランダムな値でオーバーライドする必要があります。
    • DATABASEは、SQLiteデータベースファイルが保存されるパスです。 app.instance_pathの下にあります。これは、Flaskがインスタンスフォルダー用に選択したパスです。 データベースについて詳しくは、次のセクションで説明します。
  3. app.config.from_pyfile()は、インスタンスフォルダー内のconfig.pyファイル(存在する場合)から取得した値でデフォルト構成をオーバーライドします。 たとえば、展開時に、これを使用して実際のSECRET_KEYを設定できます。
    • test_configもファクトリに渡すことができ、インスタンス構成の代わりに使用されます。 これは、チュートリアルの後半で作成するテストを、構成した開発値とは関係なく構成できるようにするためです。
  4. os.makedirs()は、app.instance_pathが存在することを保証します。 Flaskはインスタンスフォルダを自動的に作成しませんが、プロジェクトがそこにSQLiteデータベースファイルを作成するため、作成する必要があります。
  5. @app.route()は単純なルートを作成するため、チュートリアルの残りの部分に入る前に、アプリケーションが機能していることを確認できます。 URL /helloと、応答を返す関数(この場合は文字列'Hello, World!')との間に接続を作成します。


アプリケーションを実行する

これで、flaskコマンドを使用してアプリケーションを実行できます。 ターミナルから、Flaskにアプリケーションの場所を伝え、開発モードで実行します。 flaskrパッケージではなく、トップレベルのflask-tutorialディレクトリにいる必要があることを忘れないでください。

開発モードでは、ページで例外が発生するたびに対話型デバッガーが表示され、コードに変更を加えるたびにサーバーが再起動されます。 チュートリアルに従って、実行したままブラウザページをリロードすることができます。

LinuxおよびMacの場合:

export FLASK_APP=flaskr
export FLASK_ENV=development
flask run

Windowsコマンドの場合、exportの代わりにsetを使用します。

set FLASK_APP=flaskr
set FLASK_ENV=development
flask run

Windows PowerShellの場合、exportの代わりに$env:を使用します。

$env:FLASK_APP = "flaskr"
$env:FLASK_ENV = "development"
flask run

次のような出力が表示されます。

* Serving Flask app "flaskr"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 855-212-761

ブラウザで http://127.0.0.1:5000/hello にアクセスすると、「Hello、World!」が表示されます。 メッセージ。 おめでとうございます。FlaskWebアプリケーションを実行しています。

データベースの定義とアクセスに進みます。