Help us understand the problem. What is going on with this article?

Flask を用いたデータベースアプリケーション制作 Part1

Flask による Web アプリケーション制作

アプリケーション開発に必要なコードや機能をまとめたライブラリを アプリケーションフレームワークという。
本稿では、Python の Web アプリケーションフレームワークである flask を用いて、簡単なデータベース管理アプリケーションを制作してみた。

環境

macOS Catalina 10.15.1

アプリケーションの実装内容

Flask の使い方を習得すべく3つのパートに分けた。

Part1(本稿)

  • Web ブラウザの表示
  • Templates フォルダの html ファイルと連結

Part2(次稿)

  • データベース SQLite との連結
  • Bootstrap を用いた画面表示

Part3(次々稿)

  • POSTメソッドを用いた新規ユーザー登録

Part1のフォルダ構成

全てのコードは run.py によって実行される。

root
|--codes
| |--view.py
| |--templates
| | |--index.html
|--run.py

Flask のインストールとコマンドの実行

Flask は次のコマンドでインストールする。

ターミナル
pip install flask

ルートディレクトリにて、次のコマンドで run.py を実行する。

ターミナル
python run.py

Web ブラウザの表示

run.py のコードを以下に示す。コードに関する詳細はこちらを参考にした。

run.py
# codes/view.py にある app という変数を呼び出す。
# app には Flask モジュールが提供している flask クラスから作り出されたインスタンスが代入される。
from codes.view import app

# run.py がモジュールとして呼び出されたときは
# __name__ = run.py となり app は実行されない。
if __name__ == "__main__":
    app.run()

これにより、view.py で呼び出される app が実行される。
次に view.py のコードを以下に示す。

view.py
from flask import Flask

# Flask クラスから作成された インスタンスを app に代入する。
app = Flask(__name__)

# 「/」へアクセスがあった場合に、"Hello World"の文字列を返す。
# この行が無いと Web に表示されない。
@app.route("/")

# hello 関数を定義する。インデントが戻るまでが関数に含まれる。
def hello():
    return "Hello World"

# debug=True で、ソースコード書き換えのたびに app を実行しなくても確認できる。
if __name__ == "__main__":
    app.run(debug=True)

run.py のターミナル出力結果が以下のようになっていれば成功である。

 * Serving Flask app "app.app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

上記の http://127.0.0.1:5000/ にアクセスすると 'Hello World' が表示される。

Templates フォルダの html ファイルと連結

では、Templates フォルダの html ファイルをブラウザに表示させるように、view.py を編集する。

view.py
# render_template は HTML を表示させるための関数である。
from flask import Flask,render_template, 

app = Flask(__name__)

# /index へアクセスがあった場合に、templates/index.html を返す。
@app.route('/index')

# index 関数を定義する。'キカガク' は html 内の name に代入される。
def index():
    name = 'キカガク'
    return render_template('index.html', name=name)

if __name__ == "__main__":
    app.run(debug=True)

templates フォルダに 以下の index.html を作成する。
templates フォルダは view.py と同じ階層に作ること。template (単数形) のように綴りが異なると flask は読み取れずエラーが起こる。

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content = "width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <hl>Flask チュートリアル</hl>
    <p>名前: {{name}}</p>
</body>
</html>

http://127.0.0.1:5000/index にアクセスして以下がブラウザに表示されていれば成功である。

Flask チュートリアル
名前: キカガク

参考

参考:データ収集からWebアプリ開発まで実践で学ぶ機械学習活用ガイド の chapter 3-5

keisuke-ota
北海道大学大学院修士1年/ 腸内細菌叢や腸内細菌代謝物の多変量解析を専門に取り組んでおります。 ご質問等がございましたら、お気軽にご連絡ください。
https://altair.sci.hokudai.ac.jp/infmcb/index.html
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away