前回はFlaskの環境構築について説明しました。
今回はFlaskで動的なWebアプリの作成についてまとめました
・前回の記事
・前々回の記事
テンプレート使用
flaskのrender_templateを使ってテンプレートを使用できます
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
title = 'demo'
return render_template('index.html', title=title)
ルートパス'/'にアクセスすると、リクエストを受け付け、
index()が呼び出されて'index.html'のテンプレートのレスポンスが返されます
このレスポンスを画面に表示させるためにtemplateが必要です。
templateディレクトリを作成します
mkdir template
templateディレクトリに移動し、index.htmlファイルを作成します
cd template
touch index.html
<!DOCTYPE html>
<html>
<head>
<title>demo site</title>
</head>
<body>
<h1>{{ title }}</h1>
</body>
</html>
実行します
flask run --app index
このコードで画面上に「demo」という文字が出力されます
index.pyでrender_template()のパラメータで渡した'title'の値を
index.htmlの{{ title }}に渡しています
render_template()のパラメータを増やすことが可能です
(省略)
@app.route('/')
def index():
title = 'demo'
message = 'Hello World'
return render_template('index.html', title=title, message=message)
<!DOCTYPE html>
<html>
<head>
<title>demo site</title>
</head>
<body>
<h1>{{ title }}</h1>
<br>
<h1>{{ message }}</h1>
</body>
</html>
こうすると画面上に「demo」という文字の下に「Hello World」という文字が出力されます
ルーティング
GET、POST、PUT、DELETEの4つのHTTPメソッドに対応するルーティングのリクエスト処理をFlaskで実装してみます
Flaskでルート'/*'を設定するにはroute()というデコレータを使用します
こうすることで、URLのパスやHTTPメソッドに応じて異なる処理を実行することができます
ユーザーがGETメソッドで特定のURLにアクセスした場合は、GETメソッドに対応する関数が呼び出されます。同様に、POSTメソッドやPUTメソッド、DELETEメソッドなどのHTTPメソッドに対応する関数を設定することもできます
例としてGETメソッドを作成してみます
from flask import Flask, request
app = Flask(__name__)
@app.route('/get', methods=['GET'])
def get_data():
return 'GET Request'
if __name__ == '__main__':
app.run()
GETリクエストを受け取ると、get_data()が呼び出され'GET Request'という文字列が返されます
from flask import Flask, request
app = Flask(__name__)
@app.route('/put/user_id', methods=['PUT'])
def put_user(user_id):
data = request.get_json()
user = data['user'][user_id]
...
# update
...
return {200, f'{user[user_name]} update success'}
if __name__ == '__main__':
app.run()
これはPUTリクエストを受け取ると、put_user()が呼び出され、対象のuser_idのユーザ情報を更新した後に、レスポンスでステータス200と更新完了のメッセージを返しています
このようにルーティングにより様々なリクエストを処理することができ、ユーザがアクセスするURLに応じてFlaskが様々な方法でデータを処理することができます