HTMLからflaskでデータ渡し
以前、deta.spaceで作成したpythonとflaskのデータ渡しのサンプルをDockerにしてみました
htmlも少し修正してあります
Flaskで文字列出力
Exponenというフォルダーに環境を作ります
Exponen
compose.yaml
Dockerfile
app.py
+--templates
index.html
calc.html
compose.yamlやDockerfileはflask環境のものです。templatesというフォルダーを作成して配下にindex.htmlと受け側のcalc.htmlを入れます
from flask import Flask, render_template
from flask import request
import signal
import sys
app = Flask(__name__)
@app.route("/")
def hello():
return render_template('index.html')
@app.route("/calc",methods=['POST'])
def connect():
print("calc called")
num1 = int(request.form['num1'])
num2 = int(request.form['num2'])
powered=0
try:
powered = num1 ** num2
print("data:",num1,num2,powered)
except:
pass
return render_template('calc.html', a=num1,b=num2,c=powered)
def sigint_handler(signal,frame):
sys.exit(0)
if __name__ == '__main__':
signal.signal(signal.SIGINT, sigint_handler)
app.run(host='0.0.0.0', port=5000, debug=True)
route('/')の中のreturnのところで render_template関数を使ってindex.htmlの中身を読み込んでいます
index.htmlからPOSTされたデータを /calc で受けてべき乗の計算をして a b cの各変数に代入してcalc.htmlを呼び出します
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>formTest</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
</head>
<body>
<div class="container">
<h1 class="display-1 text-primary">べき乗の計算</h1>
<div class="m-5 border p-3">
<p>pythonでべき乗の計算をします。整数を2つ入力してください。</p>
<form action="/calc" method="post">
<div class="mb-3 row p-3">
<div class="col-sm">
<label for="num1"><input type="number" name="num1" id="num1">の</label>
</div>
<div class="col-sm">
<label for="num2"><input type="number" name="num2" id="num2">べき乗</label>
</div>
</div>
<div class="mb-3 row p-3">
<div class="col-sm">
<input class="btn btn-primary" type="submit" value="計算">
</div>
</div>
</form>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
</body>
</html>
ここでformを作り/calcに対してPOSTデータを送ります
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>formTest 結果表示</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
</head>
<body>
<div class="container">
<h1 class="display-1 text-primary">べき乗の計算</h1>
<div class="m-5 border p-3">
<p>pythonでべき乗の結果です。</p>
<dl>
<!-- もとの数 -->
{{a}}**{{b}}={{c}}
</dl>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>
</div>
</body>
</html>
{{a}}や{{b}}で変数を表示しています
実際の計算はapp.pyの中で行っています
いつものようの「docker compose up -d」で起動をかけて、ブラウザで「localhost:5000」を参照します
12の34乗は