このPython Flask入門チュートリアルでは、Flaskとは何か、Pythonのインストール、Virtualenv、Flask Hello Worldの例、コード例、デバッグ、テストのセクションを説明します:
Webサイト制作は技術というより芸術です。 忍耐と勤勉さ、そして根気と勇気、そして真の成功に必要なものを作るための献身が必要です。 最近では、学習者が一刻も早くスピードアップすることが必要不可欠です。
このPython Flaskチュートリアルは、Python 3を使用して、簡単なものから複雑なものまで、Webプログラミングを実装できるようになることを目的として作成しました。
このPython Flaskチュートリアルは、Python、Virtualenv、その他の必須パッケージのインストールを行う、よりFlask初心者向けのチュートリアルです。 このチュートリアルシリーズでは、その他の必要なFlaskプラグインと一緒にFlaskもインストールします。 また、コードのデバッグ、テスト、Git Actionsによる継続インテグレーションについてのセクションも用意しています。
このFlaskシリーズのチュートリアルのリスト
チュートリアルその1: Python Flaskチュートリアル - 初心者のためのFlask入門講座
チュートリアルその2: Flaskのテンプレート、フォーム、ビュー、リダイレクトとその例
チュートリアルその3: Flaskのデータベース操作 - データベースでFlaskを使う方法
チュートリアルその4: BlueprintとBootstrapによるFlaskアプリとFlaskプロジェクトレイアウト
チュートリアルその5: WebアプリケーションのためのFlaskデザインパターンとベストプラクティス
チュートリアルその6: Flask APIチュートリアル(例題付き
チュートリアル7回目: Django Vs Flask Vs Node: どのフレームワークを選ぶべきか?
チュートリアルその8: Python Flaskの人気面接質問ランキングTOP31(回答付き
フラスコとは
Flaskは、Web開発フレームワークです。 開発サーバーとデバッガを内蔵したフレームワークです。
Flaskフレームワークは、他のアーキタイプとは異なり、Web開発者が柔軟性を持ち、ソフトウェア開発コミュニティで頻繁にリリースされる変更に快適に対応できるようにするものであります。
フラスコは何に使われているのか
私たちは、Pythonプログラミング言語によるWebアプリケーションの開発にFlaskフレームワークを使用しています。 これは、他のサードパーティサービスやAPIと統合し、開発中のアプリケーションに豊かさと意味をもたらします。 Flaskのコアコンセプトはシンプルで、小さなフットプリントを持っています。
このPython Flaskチュートリアルでは、FlaskのGitHubリポジトリを利用してWeb開発を理解することから始めましょう。 ただし、先に進む前に、議論したコード例を簡単にフォローするために、Githubからプロジェクトをクローンしてください。
前提条件
本項で述べた見出し以外では、Github Accountの作成を推奨しています。 では、前提条件として、以下の手順で進めていきましょう。
ステップ1:Pythonのインストール
Python 3がインストールされているかどうかを確認し、インストールされていない場合は、ここからPython 3をダウンロードし、お使いのOSに合わせてインストールしてください。
ステップ2:Pythonの仮想環境の作成
以下のコマンドで仮想環境を作成します。
python3 -m venv venv
以下のコマンドで、Pythonの仮想環境を起動します。
ソース venv/bin/activate
以下、仮想環境の起動と解除の例を挙げました。
本チュートリアルの以降のコマンドは、起動した仮想環境で実行する必要があります。 仮想環境内でホイールを構築できるように、wheelパッケージをインストールしてください。
pip install wheel
ステップ3:Flaskのダウンロードとインソール
Flaskのダウンロード手順を実行し、以下の手順でFlaskをインストールする必要があります。
では、Flaskをインストールします。
pip install flask
Flaskのソースコードに最新の変更を加えてインストールするために、以下のコマンドを使用することができます。
テンポラリディレクトリを作成する。
mkdir tmp
GithubリポジトリからFlaskをインストールします。 以下のコマンドを実行するためには、インターネットに接続したままである必要があります。
pip3 install -e [email protected]:pallets/flask.git#egg=flask
コンソール出力を見て、インストールが成功したことを確認します。 次に、Flaskコマンドにアクセスできるかを確認します。
フラスコ --help
Flaskアプリがないという例外があるかもしれませんが、Flaskアプリは作っていないので無視してください。 このアプリはFlaskのインスタンスで、Werkzeug WebフレームワークとJinjaテンプレートエンジンでラップされています。
ワーカツーグ
Werkzeugは、WSGIツールキットです。 WSGIは、Webサーバーが転送するための呼び出し規約でしかありません。 ウェブリクエスト を、プログラミング言語Pythonで書かれたWebアプリケーションに変換します。
ジンジャ
JinjaはPython用のテンプレートエンジンです。 Jinjaは非常に表現力のある言語で、テンプレート作成者に堅牢なツールセットを提供します。
ステップ4:MongoDBをインストールする
MongoDBをインストールするには、以下の手順に従います。 DebianベースのLinuxにインストールする手順を説明しました。 他のOSを使用している場合は、リンク先にアクセスし、目的のOSに従ってインストールしてください。
MongoDBの公開GPG鍵をインポートするためにgnupgをインストールします。
sudo apt-get install gnupg
次に、以下のコマンドを使用してキーをインポートします。
wget -qO - //www.mongodb.org/static/pgp/server-4.2.asc
Linuxディストリビューションに応じたソースリストファイルを作成します。 ここでは、Debianに応じたソースリストを追加しています。
echo "deb //repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" です。
アップデートコマンドの実行
sudo apt-get update
次に、以下のコマンドを使用して、MongoDBをインストールします。
sudo apt-get install -y mongodb-org
インストールに成功したら、以下のコマンドでMongoDBを起動します。
sudo systemctl start mongod
以下のコマンドで、MongoDBのステータスを確認します。
sudo systemctl status mongod
次に、以下のコマンドを実行して、システム再起動時にmongodが自動的に起動することを確認します。
sudo systemctl enable mongod
ここで、mongoクライアントを使用してMongoDBサーバーに接続できるかどうかを確認します。
モンゴ
mongoシェルで、helpコマンドとshow dbsコマンドを使ってみてください。
Flaskアプリの作成
以下のコマンドで、flask-appbuilderとmongoengineをインストールしてください。
pip install flask-appbuilder pip install mongoengine pip install flask_mongoengine
以下のコードスニペットでコメントとして示されている値を持つスケルトンアプリを作成します。
flask fab create-app # コマンドラインアンケートで以下の値を与える # アプリケーション名:flaskTutorialApp # EngineType : MongoEngine
以下に示すような出力が表示されます。
Your new app name: exampleApp Your engine type, SQLAlchemy or MongoEngine (SQLAlchemy, MongoEngine) [SQLAlchemy]: MongoEngine Downloaded the skeleton app, good coding!
プロジェクトとアプリのレイアウトをご覧ください。 以下にtreeコマンドの出力を示します。
Flaskの設定ファイルを見てみましょう。 前回のコマンドの結果として生成されたデフォルトの設定ファイルです。 コメントを解除する サイボーグ というテーマで、下図のように
# Cybord=g のテーマ設定 # これらのテーマは static/appbuilder/css/themes にある # 同じdir構造に置いて上書きすれば、自分たちで作って簡単に使える #APP_THEME = "bootstrap-theme.css" # default bootstrap #APP_THEME = "cerulean.css" # cerulean #APP_THEME = "amelia.css" # ameliaテーマ #APP_THEME = "cosmo.css" # cosmoテーマ APP_THEME = "cyborg.css" # cyborgテーマ #APP_THEME = "flatly.css" #フラットリーテーマ
スケルトンアプリを実行するには、ターミナルで以下のコマンドを使用します。
フラスコ走法
フラスコ ハローワールド
flaskTutorialAppで最初のプログラムを作成するために、appディレクトリの下にあるviews.pyを開き、以下のコードを追加します。 ファイル内にあるimport文を探します。 まだ存在しない場合は、これらの文を追加します。
from flask_appbuilder import BaseView, expose from app import appbuilder class HelloWorld(BaseView): """ このチュートリアルの最初のビュー """ route_base = "/hello" @expose("/") def hello(self): return "Hello, World! from Software Testing Help" #ファイルの最後に appbuilder.add_view_no_menu(HelloWorld())
上記ソースコードを追加したファイルを保存します。 プロジェクトのルートディレクトリに移動し、以下のコマンドでFlaskの開発サーバを起動します。
フラスコ走法
ここで、//localhost:5000/hello/に移動し、ブラウザで出力を確認します。
デバッギング
現在、開発サーバーはデバッグモードで動作していません。 デバッグモードでないと、Flask Applicationのソースコードからエラーを発見することが困難です。
FlaskのDebug Modeでは、以下のようになります:
- デバッグモードでは、Automatic reloaderが作動するため、アプリケーションのソースコードに変更を加えても、開発サーバーを再起動する必要がありません。
- デバッグモードでは、Pythonのデバッガが起動します。 Exception中の変数の値を検査することができます。
- デバッグモードでは、Flaskアプリケーションのデバッグが可能です。 デバッグセッションで様々な変数の値を確認することができます。
開発サーバーがすでに起動している場合は停止します。 CTRL + Cまたはキーボード割り込みで同じことができます。
以下のコードでデバッグモードを有効にして、開発サーバーを一時的に実行します。
FLASK_ENV=開発用フラスコラン
コンソールで「Debugger PIN」を検索し、メモしておく。
では、上記のHelloWorldビューを次の行のコードスニペットで変更してみましょう。 カスタム例外を導入していることに注目してください。
@expose("/") def hello(self): raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help".
ブラウザでスタックトレースを確認すると、以下のように表示されます。
![](/wp-content/uploads/guides/iae5sr2a76-3.png)
さらに、開発サーバーが動作しているコンソールを見てください。 今回、views.pyの変更が自動的に検出され、デバッグサーバーが勝手に再起動していることがわかります。 これで、手動で再起動する必要はありません。
コンソールには以下のような行が表示されます。 Debug PINは後々のためにメモしておく必要があります。
* '/work/sth/flaskTutorialApp/app/views.py' の変更を検出、リロード中 2020-06-02 14:59:49,354:INFO:werkzeug: * '/work/sth/flaskTutorialApp/app/views.py' の変更を検出、リロード中 * stat で再起動 2020-06-02 14:59:49,592:INFO:werkzeug: * stat で再起動 * Debugger is active! * Debugger PIN: 150-849-897
ブラウザでスタックトレースを確認し、最後の行をクリックし、CLIアイコンをクリックして対話モードでシェルを開きます。
![](/wp-content/uploads/guides/iae5sr2a76-4.png)
ブラウザを開くと、Debug PINを入力する画面が表示されます。 Debug PINを入力し、「OK」をクリックしてください。
![](/wp-content/uploads/guides/iae5sr2a76-5.png)
Debug PINを付与して先に進むと、インタラクティブシェルにアクセスできるようになります。
ブラウザからシェルにアクセスし、変数の値を調べることで、Exceptionの原因を見つけ、より良い方法でエラーを処理することができます。 下の画像に示す例の一つをご覧ください。
![](/wp-content/uploads/guides/iae5sr2a76-6.png)
次に、view.pyのコードを以下のように変更します。 Exceptionが発生した行をコメントアウトしていることに注意してください。
@expose("/") def hello(self): # raise Exception("A custom exception to learn DEBUG Mode") return "Hello, World! from Software Testing Help"
Flaskアプリケーションのテスト
それでは、開発中のFlaskアプリケーションの最初のテストを書いてみましょう。 まず、PyTestをインストールします。 PyTestはテストフレームワークです。 より良いコードを書くために役立ちます。
また、アプリケーションを開発しながらユニットテストを書くことができるので、TDDアプローチに従うことができます。 TDDとは、Test-Driven Developmentの略で、このシリーズの次のチュートリアルでは、常に最初にテストを書き、ビューやモデルを開発することにします。
PyTestのインストール
pip install pytest
アプリのディレクトリ内にtestsというディレクトリを作成し、その中にtest_hello.pyというファイルを作成します。ビューをテストするための最初のユニットテストを書いてみましょう。
以下のコードスニペットをコピーして、test_hello.pyに貼り付けてください。
#!/usr/bin/env python from app import appbuilder import pytest @pytest.fixture def client(): """ A pytest fixture for test client """ appbuilder.app.config["TESTING"] = True with appbuilder.app.test_client() as client: yield client def test_hello(client): """ A test method to test view hello """ resp = client.get("/hello", follow_redirects=True) assert 200 == resp.status_code
PyTestは自動的にTestsを収集し、その結果を標準出力に表示します。
![](/wp-content/uploads/guides/iae5sr2a76-7.png)
GitHubのワークフローを作成する
ここでは、Git Actionsを使用して、サンプルアプリケーションのCI/CDワークフローを作成します。 以下の手順に従って、プロジェクトを作成してください。
ステップ1:GitHubのリポジトリページに移動します。 Git Actionsをクリックします。
![](/wp-content/uploads/guides/iae5sr2a76-8.png)
ステップ2:ページを下にスクロールして、Pythonパッケージの既存のワークフローテンプレートを見つけます。
![](/wp-content/uploads/guides/iae5sr2a76-9.png)
ステップ3:PythonパッケージWorkflowをセットアップする。
![](/wp-content/uploads/guides/iae5sr2a76-10.png)
ステップ4:python-package.ymlワークフロー設定が開いたら、与えられたyaml追加タグの値に基づいてそれを更新します。
name: flaskTutorialApp jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: [3.7, 3.8] mongodb-version: [4.2] steps: - name: Start MongoDB uses: supercharge/[email protected] with: mongodb-version: ${{ matrix.mongodb-version }} # other values
Flaskアプリケーションを最新のUbuntu Linuxディストリビューションでテストしたい。 OSに加えて、Python 3.7とPython 3.8のみを使用してテストを実行したい。
ステップ5:更新された値でpython-package.ymlをコミットします。
![](/wp-content/uploads/guides/iae5sr2a76-11.png)
ステップ6:前ページのコミットで、GitActionsのジョブに移動します。
![](/wp-content/uploads/guides/iae5sr2a76-12.png)
ステップ7: [オプション】の場合]
サンプルのチュートリアルアプリのGithub Jobsページでは、ビルド状況を表示するためのバッジを作成し、README.mdファイルに配置することができます。
これで、変更が master ブランチにコミットされるたびに、python-package.yml に書かれた Git Workflow が Git Actions に従って実行されるようになりました。
結論
このチュートリアルでは、PythonベースのWeb開発フレームワークであるFlaskを使って開発したWebアプリケーションのCI/CDワークフローを設定するための前提条件から基本的なコンセプトまで、すべてをカバーしました。
このチュートリアルでは、Pythonを使ったWeb開発を始めるために必要な、Pythonのインストール、Flaskのダウンロード&インストール、Flask-Appbuilderでの作業、PyTestでのテストなど、すべてのステップをカバーします。 Web開発コミュニティでは通常、FlaskとDjangoという別の人気の Python Web開発フレームワークを比較します。
これらの違いについて説明し、本シリーズのチュートリアルの1つでこれらのフレームワークを比較する予定です。