忙しい人のためのflaskアプリ、もっとも質素でミニマムなflaskアプリ(pytest含む設定)

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リポジトリはこちらです。

GitHub
GitHub - perfectpanda-works/panda-flask Contribute to perfectpanda-works/panda-flask development by creating an account on 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
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次