flaskアプリをミニマムにまとめてみました。
今までの復習になりますな
flaskのアプリケーション構成をチュートリアルで勉強してきましたが、なんだか色々な要素があってよくわからなくなってきましたので、一連の流れでミニマムなアプリ構成を考えてみました。今回は、アプリケーションファクトリの方式を取らない、一番シンプルな形式(appをそのままプログラム内でインスタンス化する方法)でやってみました。
このフォルダ構成や、pytestまでの流れでシンプルにアプリを実装したい時のベースになることを、望んでいます。
こんな人の役に立つかも
・flaskのミニマムな構成が知りたい人
・flaskアプリの開発に取りかかる人
・flaskをざっくり使いたい忙しい人
ミニマムなアプリ構成
Pythonの階層にflask_minimumフォルダを作成してvenv仮想環境を設定し、venv仮想環境を立ち上げてFlaskをインストールします。
$ cd Python
$ mkdur flask_minimum
$ cd flask_minimum
$ python3 -m venv venv
$ . venv/bin/activate
(venv)$ pip install Flask
ミニマムなアプリをmin_appというフォルダ内に作成します。まずはアプリのプログラムなどを格納するためのプロジェクトフォルダ「min_app」を作成します。
$ mkdir min_app
min_app内にflaskアプリの本体プログラム、「__init__.py」を作成します。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html')
templateでindex.htmlを表示するようにしますので、templatesフォルダに「index.html」を配置します。
<!doctype html>
<h1>INDEX death</h1>
シンプルイズベスト・・・
ここまでで、アプリが動作するか確認してみます。
(venv)$ export FLASK_APP=min_app
(venv)$ export flask run
ブラウザで「localhost:5000/」にアクセスします。
アプリをpipインストールできるように設定
pytestのテスト用プログラムでimportできるようにmin_appをpipコマンドでインストール可能にします。
「MANIFEST.ini」を次のようにテンプレートフォルダを含むように設定してflask_minimun階層に配置します。
graft min_app/templates
global-exclude *.pyc
fkask_minimum階層に「setup.py」を次のように作成して配置します。
from setuptools import find_packages, setup
setup(
name='min_app',
version='1.0.0',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
],
)
flask_minimumプロジェクトフォルダ内のvenv仮想環境でmin_appをimportできるようにpipコマンドでインストールします。
(venv)$ pip install -e .
(venv)$ pip list
pip listコマンドで次のようにインストール済みパッケージとして表示されたらOKです。
これでpytestのtestsフォルダからもappが参照できるようになりました。
pytestを使えるように
pipでvenv仮想環境にpytestをインストールし、testsフォルダを作成します。
(venv)$ pip install pytest
(venv)$ mkdir tests
好みでcoverageモジュールもどうぞ
testsフォルダ内に、「test_first.py」として、シンプルなテストを作成しておきます。
import min_app
def test_first():
min_app.app.testing = True
assert min_app.app.test_client().get('/').status_code == 200
シンプルにindexをGETしてステータスコード200が返ってくるかをテストしています。
今回は、アプリケーションファクトリでappインスタンスを作成していないので、importしたmin_appへはmin_app.appのようにアクセスできますね。
GitHubからcloneして利用
今回作成したプログラムのGitHubリポジトリはこちらです。
次のコマンドでcloneして動作させることができます。
これからプロジェクトフォルダを配置したい階層へ移動して、git cloneしてダウンロードします。
$ cd Python
$ git clone https://github.com/perfectpanda-works/panda-flask.git
仮想環境を立てて、必要モジュールをrequirements.txtを利用してインストールします。
mac
$ Python3 -m venv venv
$ . venv/bin/activate
(venv)$ pip install -r requrements.txt
windows
> py -3 -m venv venv
> venv\Scripts\activate
(venv)> pip install -r requrements.txt