ラズパイデスクトップでFlask入門(2)Tutorial (Application Setup)
こんばんは。國松です。
今回からFlaskのサイトにあるTutorialをやっていきたいと思います。Tutorialを最後までやれば簡単なBlogアプリができるばずです。
参考サイト
Welcome to Flask (英語版)
Flaskへようこそ (日本語版)
Tutorial
このチュートリアルでは、Flaskrと呼ばれる基本的なブログアプリケーションを作成する方法を説明します。 ユーザーは、登録、ログイン、投稿の作成、自分の投稿の編集または削除ができます。 アプリケーションをパッケージ化して、他のコンピューターにインストールできます。
チュートリアルではFlaskのすべての機能について網羅することはできないのでFlaskでできることはQuickStartを確認してからドキュメントを確認するするなどして下さい。
Project Layout
まずチュートリアル用のディレクトリを作成していきます。
1 2 | mkdir flask-tutorial cd flask-tutorial |
Flaskアプリケーションは前回やったように1つのファイルでも作ることができます。ただし、プロジェクトが大きくなると、すべてのコードを1つのファイルに保存するのが大変になります。 Pythonプロジェクトでは、パッケージを使用してコードを複数のモジュールに編成し、必要に応じてインポートできます。チュートリアルでもこれを行います。
チュートリアル全体の構成は以下様になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /home/user/Projects/flask-tutorial ├── flaskr/ │ ├── __init__.py │ ├── db.py │ ├── schema.sql │ ├── auth.py │ ├── blog.py │ ├── templates/ │ │ ├── base.html │ │ ├── auth/ │ │ │ ├── login.html │ │ │ └── register.html │ │ └── blog/ │ │ ├── create.html │ │ ├── index.html │ │ └── update.html │ └── static/ │ └── style.css ├── tests/ │ ├── conftest.py │ ├── data.sql │ ├── test_factory.py │ ├── test_db.py │ ├── test_auth.py │ └── test_blog.py ├── venv/ ├── setup.py └── MANIFEST.in |
Application Setup
Flaskアプリケーションは、Flaskクラスのインスタンスです。 構成やURLなど、アプリケーションに関するすべてがこのクラスに登録されます。
Flaskインスタンスをグローバルに作成する代わりに、関数内に作成します。 この機能は、アプリケーションファクトリと呼ばれます。 アプリケーションが必要とする構成、登録、およびその他のセットアップは、関数内で行われ、アプリケーションが返されます。
The Application Factory
まずflaskrディレクトリを作成して移動します。
1 2 | mkdir flaskr cd flaskr |
次にflaskrディレクトリの中に__init__.pyファイルを作ります。__init__.pyはアプリケーションファクトリを含み、flaskrディレクトリをパッケージとして扱う必要があることをPythonに伝えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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は、アプリケーションファクトリ関数です。チュートリアルの後半で追加しますが、すでに多くのことができます。
app = Flask(__ name__、instance_relative_config = True)は、Flaskインスタンスを作成します。
__name__は、現在のPythonモジュールの名前です。アプリは、いくつかのパスを設定するためにその場所を知る必要があり、__ name__はそれを伝える便利な方法です。
DATABASEは、SQLiteデータベースファイルが保存されるパスです。これはapp.instance_pathの下にあります。これは、Flaskがインスタンスフォルダ用に選択したパスです。
@ app.route()は簡単なルートを作成するため、チュートリアルの残りの部分に入る前にアプリケーションが動作しているのを確認できます。 URL / helloと、URL/helloにアクセスしたとき応答を返す関数「Hello、World!」を作成します。
Run the Application
これで、flaskコマンドを使用してアプリケーションを実行できます。
1 2 3 | export FLASK_APP=flaskr export FLASK_ENV=development flask run |
とコマンドを入力するとサーバーが起動してアプリが実行されます。=の前後にはスペースを入れない様に注意して下さい。
コマンドを実行するときはflask-tutorialディレクトリで実行してください。flaskrディレクトリで実行すると動作しません。
またflask runで動作しない場合はpython -m flask runコマンドを試してみて下さい。
ブラウザで http://127.0.0.1:5000/hello にアクセスしてHello World!と表示されればOKです。
うまくいかない場合(Error the file/path)
上記のFlaskのサイトのTutorialの通りに__init__.pyを作成して実行しても以下の様なエラーで出てうまく動かないことがあります。
Error: The file/path provided (flaskr) does not appear to exist.
Please verify the path is correct. If app is not on PYTHONPATH, ensure the extension is .py
そのような時は以下のGtiHubから__init__.pyをダウンロードして実行してみてください。
GitHub flask example tutorial flaskr
こちらの__init__.pyはtutorialを最後までやった完成バージョンなので今の段階では不要なコードも含まれています。
39行目from flaskr import auth, blogからreturn app までのコードはコメントアウトして下さい。(return appは必要なのでコメントアウトしないように)
今回はここまでにしたいと思います。次回はデータベースを設定していきます。