大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

ラズパイデスクトップでFlask入門(2)Tutorial (Application Setup)

著者:國松亜紗子
公開日:2019/09/30
最終更新日:2019/09/30
カテゴリー:技術情報

こんばんは。國松です。
今回からFlaskのサイトにあるTutorialをやっていきたいと思います。Tutorialを最後までやれば簡単なBlogアプリができるばずです。

参考サイト
Welcome to Flask (英語版)
Flaskへようこそ (日本語版)

Tutorial
このチュートリアルでは、Flaskrと呼ばれる基本的なブログアプリケーションを作成する方法を説明します。 ユーザーは、登録、ログイン、投稿の作成、自分の投稿の編集または削除ができます。 アプリケーションをパッケージ化して、他のコンピューターにインストールできます。
チュートリアルではFlaskのすべての機能について網羅することはできないのでFlaskでできることはQuickStartを確認してからドキュメントを確認するするなどして下さい。

Project Layout
まずチュートリアル用のディレクトリを作成していきます。

mkdir flask-tutorial
cd flask-tutorial

Flaskアプリケーションは前回やったように1つのファイルでも作ることができます。ただし、プロジェクトが大きくなると、すべてのコードを1つのファイルに保存するのが大変になります。 Pythonプロジェクトでは、パッケージを使用してコードを複数のモジュールに編成し、必要に応じてインポートできます。チュートリアルでもこれを行います。

チュートリアル全体の構成は以下様になります。

/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ディレクトリを作成して移動します。

mkdir flaskr
cd flaskr

次にflaskrディレクトリの中に__init__.pyファイルを作ります。__init__.pyはアプリケーションファクトリを含み、flaskrディレクトリをパッケージとして扱う必要があることをPythonに伝えます。

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コマンドを使用してアプリケーションを実行できます。

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は必要なのでコメントアウトしないように)

今回はここまでにしたいと思います。次回はデータベースを設定していきます。

 

    上に戻る