3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Flaskアプリケーションの環境構築と構成(Application Factory)

3
Posted at

この記事ではFlaskウェブアプリの環境構築の手順とアプリ構成を説明します。
Application FactoryはFlaskアプリの一般的な構成方法を指します。

主に以下の記事を参考にしました。
https://hackersandslackers.com/demystifying-flask-application-factory/

パッケージのインストール

まず、Pythonの仮想環境virtualenvを立ち上げます。
仮想環境は複数プロジェクト間のパッケージ依存を避けるためには欠かせないものです。
以下のコマンドでvenvという仮想環境のディレクトリを作り、たちあげます。

次に、pipを使ってパッケージをインストールしていきます。
取り合えずflaskとflask_corsをインストール。
インストールしたパッケージの詳細はrequirements.txtに記しておくと便利です。

$ py-3 -m venv venv
$ venv\Scripts\activate # このコマンドはOSによって異なります。上記はWindowsコマンド
(venv) $ pip install flask
(venv) $ pip install flask_cors
(venv) $ pip freeze > requirements.txt

アプリ作成・設定

次に、Applicationディレクトリを作ってその中に、init.pyを作ります。
このファイルにはアプリを作成する関数を書きます。
アプリの設定や初期ページ、CORSの設定などを行っています。

application/__init__.py
from flask import flask, flask_cors

def create_app():
    # アプリのインスタンス
    app = Flask(__name__, template_folder="templates", static_folder="static")
    app.config.from_object('config.configObject')

    CORS(app, resources={r'/*': {'origins': '*'}})
    
    # 初期ページの設定
    @app.route('/')
    def hello_world():
        return "Hello World"

   return app

次に、アプリ設定をみていきましょう。
ファイルをプロジェクトディレクトリ直下にconfig.pyを作ります。

Configファイルに、オブジェクトを作り、アプリ設定要項を加えます。
例えばデータベースURLやシークレットキーなどなど...
各要項は環境変数ファイルから取り出すようにしました。

ひとまずウェブアプリに必要不可欠なDBのURIとセッションのシークレットキーを追加します。
こういう書き方をすると環境変数によって開発configとプロダクションconfigを使い分けることができて便利です。

config.py
import os

class Config:
   SECRET_KEY = os.environ.get('SECRET_KEY')

class ProdConfig(Config):
   DATABASE_URI = os.environ.get('PROD_DATABASE_URI')

class DevConfig(Config):
   DATABASE_URI = os.environ.get('DEV_DATABASE_URI')

if os.environ.get('FLASK_ENV') == 'production':
   configObject = ProdConfig
else:
   configObject = DevObject

上記のconfigObjectは__init__.pyで使われています。

サーバー立ち上げ

それでは、実際にサーバーを走らせるファイルをみていきましょう。
アプリ作成の関数を呼び、走らせる。これだけです。

wsgi.py
from application import create_app

app = create_app()

if __name__ == "__main__":
   app.run()

最後にプロジェクトディレクトリ内に環境変数ファイルを作って

..flaskenv
FLASK_APP = "wsgi"
FLASK_ENV = "development"

SECRET_KEY = ""
DEV_DATABASE_URI = ""
PROD_DATABASE_URI = ""

ターミナルで以下のコマンドを打ったら...

$ flask run
 * Serving Flask app "wsgi" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 265-303-162
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

サーバーが立ち上がりました♪

早速localhost開いてみます。私の場合はlocalhost:5000/です。
ターミナルが案内するポートに移動しましょう。
Hello world!と出たらOKです!

プロジェクト構成

この段階でのプロジェクト構成はこんな感じです。

flask_jinja_app/
|- venv
|- application
   __init__.py
config.py
wsgi.py
requirements.txt
.flaskenv

最後に

アプリのサーバーサイドが整ってきました。
あとはDBの設定、Blueprintの登録と共通テンプレートページの作成をしたら基本的なウェブアプリの骨組みが完成します。

残りはまた別の記事で。文章力がなくて申し訳ありませんでした。-_-

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?