Flask
参考文献
適当なアプリケーション
Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
flask = "*"
[requires]
python_version = "3.9"
app.py
from urllib.parse import quote
from flask import Flask, render_template, request
class Info:
"""
指定されたパラメータと結果を管理するクラス
"""
def __init__(self, host):
self.country_name = '日本'
self.result = None
self.host = host
def set_sharing_url(self):
self.sharing_url = self.host + '/?country_name=' + quote(self.country_name)
def update(self, d):
# 指定されたパラメータを吸い上げる
self.__dict__.update(d)
# 指定されたパラメータを処理して結果をセットする
if self.country_name == '日本':
self.result = '日本の首都は東京です。'
elif self.country_name == 'アメリカ':
self.result = 'アメリカの首都はワシントンDCです。'
else:
self.result = 'その国の首都はわかりません。'
# 共有用にパラメータをプリセットしたURLをセットする
self.set_sharing_url()
app = Flask(__name__)
@app.route(f'/', methods=['GET'])
@app.route(f'/post', methods=['GET', 'POST'])
def index():
info = Info('http://' + request.host)
# GET ならパスパラメータからパラメータを取得して処理
if request.method == 'GET':
info.update(request.args)
# POST ならフォームからパラメータを取得して処理
if request.method == 'POST':
info.update(request.form)
return render_template('index.html', info=info)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False)
templates/layout.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>demo</title>
<style>
body {
background: aliceblue;
padding: 20px;
letter-spacing: 0.05em;
line-height: 1.4;
}
</style>
</head>
<body>{% block content %}{% endblock %}</body>
</html>
templates/index.html
{% extends "layout.html" %}
{% block content %}
<h1>デモツール</h1>
<form action="/post" method="POST">
国名: <input name="country_name" value="{{ info.country_name }}"/><br/>
<button type="submit" name="action">OK</button><br/>
{% if info.result %}
{{ info.result }}<br/>
<a href="{{ info.sharing_url }}">この結果へのURL</a>
{% endif %}
</form>
{% endblock %}