Blow Up by Black Swan

Python-Flaskで作るWebアプリケーション(チュートリアル編1)

前回、複数回に分けて公式ドキュメントのクイックスタートをまとめる記事を書きました。クイックスタートではFlaskの主要機能について説明されており、記事でもその内容が主体でした。今回は、公式ドキュメントのチュートリアルを通して、実際にアプリケーションを作成する記事になります。WebアプリケーションフレームワークであるFlaskを使って、どのようにアプリケーションを作るか、それがチュートリアル編の主要トピックになります。基本的には英語の公式ドキュメントをまとめるという形になりますが、英語独特の表現でわかりにくいところはできる限り噛み砕き、補足説明等を追加するなりしてわかりやすくなるように努めました。

なお、分量が多いので今回も複数の記事に分割しています。目次の番号はチュートリアルの記事全体での通し番号としています。主要参考サイト、チュートリアル編の記事、クイックスタート編の記事については下記になります。また、私はエディターにPycharmを使っています。環境構築の部分はターミナルを使っていますが、その他のところではPycharmで直接ファイル作成等をしています。

この記事が一人でも多くの方の参考になりましたら、幸いです。

主要参考サイト: Flask – Tutorial(公式ドキュメント)

導入

このチュートリアルでは、Flaskrと名付けられた、基本的な機能を持ったブログアプリケーションを作成します。このブログアプリケーションは、ユーザ登録、ログイン、自身の記事の投稿、編集、削除といった機能を持ちます。またパッケージ化し、他のPCやサーバでインストールできるようにもします。

このアプリケーションを作成する上で、Pythonの使い方をある程度理解していることを前提としています。Pythonを学ぶ、機能を見るには公式チュートリアルを参照して下さい。

このチュートリアルはちょうど良いスタート地点にはなりますが、Flaskの全ての特徴を網羅するわけではありません。Flaskの機能を把握するにはクイックスタートを参照することが推奨され、詳細な情報はドキュメントを参照することが推奨されます。チュートリアルは、FlaskとPythonで提供される機能だけを利用します。今後、自作プログラムを作るときなどは、拡張機能や他のライブラリなどを使うことも可能です。

Flaskは柔軟なフレームワークです。特定のプロジェクトやコードレイアウトを必要としません。一方で学習を始める上では、構造的なアプローチを取ることが役に立ちます。これはチュートリアルが一部、定型的な形式を利用することを意味しますが、これにより新規の開発者が共通して遭遇する多くの落とし穴を避けることができ、拡張しやすいプロジェクトを作成できるようになります。一旦Flaskに慣れれば、この構造から抜け出し、Flaskの柔軟性を最大限利用できるようにもなります。

このチュートリアルプロジェクトは、Flaskリポジトリ内のサンプルプロジェクトにもコードが格納されています(今回の記事ではこのリポジトリは特に使わず、記事内で全てのコードが記述されています)。

1. プロジェクトレイアウト

プロジェクトディレクトリを作成し、開発環境を構築し、Flaskをインストールします。ここではプロジェクトディレクトリを”flask-tutorial”と名付け、このディレクトリ内でブログアプリケーションを構築していきます。

# terminalで作業

# プロジェクトディレクトリの作成
~$ mkdir flask-tutorial
~$ cd flask-tutorial

# 開発環境の構築とアクティベート
flask-tutorial$ python3 -m venv venv
flask-tutorial$ . venv/bin/activate

# pipのアップグレードとflaskのインストール
(venv)flask-tutorial$ pip install --upgrade pip 
(venv)flask-tutorial$ pip install flask

Flaskアプリケーションは、一つのファイルだけのシンプルな作りも可能です。しかし、プロジェクトの規模が大きくなると、1つのファイルで全てのコードを調整することは難しくなります。Pythonのプロジェクトでは、複数のモジュールでコードを構成するパッケージ形式を利用します。パッケージは、必要な環境のどこにでもインポートでき、チュートリアルでもこのパッケージ化を行っています。

(プロジェクトファイルの構造)

  • flaskr/…アプリケーションのコードとファイルを含むPythonパッケージ
  • tests/…テストモジュールを含むディレクトリ
  • venv/…Flaskと依存パッケージがインストールされるPythonの仮想環境
  • setup.py…pythonにプロジェクトのインストール方法を記述する所定ファイル
  • バージョン管理フォルダ…プロジェクトのサイズに関係なく、gitに代表されるバージョン管理の利用が推奨される(当記事では対象としない)
  • その他、必要な場合に加えられるプロジェクトファイル

(ファイル構成の概略)
※ ここに記されていない設定関連のデータを格納するinstanceフォルダなどもプロジェクト内で作成されます。

~/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

バージョン管理システムを利用するとしても、バージョン管理する必要のないファイルも存在します。その場合そのファイルは対象外にしますが、gitであれば除外するファイルは.ignoreファイルに次のように記述します。

(.gitignoreの記載内容)

venv/

*.pyc
__pycache__/

instance/

.pytest_cache/
.coverage
htmlcov/

dist/
build/
*.egg-info/

チュートリアル2