akatak’s blog

プログラム初心者の50代ビジネスマンがセカンドキャリアを目指して働きながらPythonを中心に独学しています。自らの覚え書きや成果物、感じたことなどを脈絡もなく書き連ねるブログです。

FlaskとSQLAlchemyで読書記録Webアプリを作る(2)

前回、読書記録Webアプリで利用するモジュールの概略をご説明しましたので、今回から具体的にWebアプリの作成に入っていきましょう。

まずは、Flaskホームページのクイックスタートに掲載されている最小規模のアプリケーション例からご紹介します。

FlaskでHello World!を表示する

予めpip install flask等でFlaskをインストールしておきます。そして、ファイル名をhello.pyとでもして、以下のスクリプトを書きます。

# hello.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello World!"

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

これだけです。ターミナルからpython hello.pyと実行します。

$ python hello.py
 * Running on http://127.0.0.1:5000/

すると上記のように表示されますので、ブラウザのアドレス入力欄にhttp://127.0.0.1:5000/を入力します。”Hello World!”と出力されました。おめでとうございます。簡単に作成できました。この気軽さがFlaskの良いところですね。

上記のスクリプトでやっていることは以下の通りです。 まず、 flaskからFlask クラスをインポートし、次にFlaskインスタンスを生成します。 そして、route() デコレータを使用し、関数を起動するURLをFlaskインスタンスに教えます。今回は、routeの中が/なので、実行後にhttp://127.0.0.1:5000/を入力すると、デコレータの次に記載の関数が呼び出され、Hello World!という文字列が返されます。

最後に runメソッドを使い、ローカルサーバー上でアプリケーションを実行します。if __name__ == '__main__':は、そのスクリプトがPyrhonから直接実行されたときだけ、 そのサーバ上で動くことになります。モジュールとして他のプログラムからインポートされたときにはapp.run()は実行されません。

読書記録Webアプリの構成を考える

簡単にFlaskアプリが作成できることを確認できましたところで、読書記録Webアプリの作成に取り掛かっていきます。 まず、最初に全体の構成を見てみましょう。

books.py
config.py
web/
    __init__.py
    forms.py
    models.py
    app.db
    books/
        views.py
    templates/
        base.html
        books/
            index.html
            each_book.html
            register_book.html

(以下は、いずれ追加していきます)
    authors/
    publishers/
    searches/
ファイル/ディレクトリ名 説明
books.py 本アプリの実行用のファイル。中身は非常にシンプル
config.py 各種設定を格納しておくファイル。init.pyで各種設定を記述しても良いが、config.pyに設定を外出ししておくと、init.pyファイルがすっきりする。
web/init.py 本アプリを立ち上げた際に、最初に実行され、様々なコンポーネントを読み込む
web/forms.py 書籍名など、ユーザー入力用のフォームを定めるもの
web/models.py データベースのテーブル構成を定めるもの。テーブルに相当するクラスを定義しておきます。ここできちんと定義しておくと、sqlalchemy等により、簡単にsqlite3等にテーブルが生成されます。
web/app.db sqlite3データベースです。どのフォルダ下に作るのかについては、上記のconfig.pyで指定しておきます。
web/books/views.py 本アプリのURLとそのURLを指定した場合に実行するスクリプトを記述するファイルです。routeデコレータでurlを指定し、その直後に関数を記述するようにします。webフォルダ直下にviews.pyをおいても良いのですが、今回は、書籍だけでなく、著者や発行者も入力できるようにするつもりですので、書籍を入力する場合のviews.pyだと分かるようにbooksフォルダ傘下にviews.pyを置いています
web/templates/ このtemplatesの傘下には、htmlファイルを基本的に配置します。booksというフォルダを作成したのは、この後、書籍だけでなく、著者は発行者についても登録、削除等を行うようにしたいので、同じような名称のhtmlファイルができるので、予めフォルダで分けておきたいと思っているからです。

さて、具体的に次回からコーディングの例をご紹介していきますね。