您可以将button 与form 或JavaScript 一起使用
表格
通常要使用button,您需要<form>,它将请求发送到Flask 到action="..." 中定义的url,Flask 发送回响应(文本/HTML),浏览器会自动将其放在窗口中代替以前的 HTML - 所以服务器必须一次又一次地生成完整的 HTML。
from flask import Flask, request, render_template_string
import datetime
app = Flask(__name__)
@app.route('/')
def index():
return render_template_string('''<form action="/page" method="POST">
<button type="submit" name="btn" value="Button 1">Button 1</button>
<button type="submit" name="btn" value="Button 2">Button 2</button>
<button type="submit" name="btn" value="Button 3">Button 3</button>
</form>''')
@app.route('/page', methods=['GET', 'POST'])
def page():
value = request.form.get('btn') # gives text from `value="Button 1"`
return f'You pressed {value} at ' + datetime.datetime.now().strftime('%Y.%m.%d %H:%M.%S')
if __name__ == '__main__':
#app.debug = True
app.run() #debug=True
同样使用空的action="",所以它发送请求到相同的url,它需要检查request.method来运行不同的代码
from flask import Flask, request, render_template_string
import datetime
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
value = request.form.get('btn') # gives text from `value="Button 1"`
info = f'You pressed {value} at ' + datetime.datetime.now().strftime('%Y.%m.%d %H:%M.%S')
else:
info = ""
return render_template_string('''<form action="" method="POST">
<button type="submit" name="btn" value="Button 1">Button 1</button>
<button type="submit" name="btn" value="Button 2">Button 2</button>
<button type="submit" name="btn" value="Button 3">Button 3</button>
</form>{{text}}''', text=info)
if __name__ == '__main__':
#app.debug = True
app.run() #debug=True
JavaScript
如果你想在不重新加载所有 HTML 的情况下执行 Flask 代码,那么你需要使用 JavaScript,它可以使用旧的向服务器发送请求
XMLHttpRequest 或现代 fetch(),获得响应并仅替换部分 HTML。通常在这种方法中,服务器会发送 JSON 数据,JavaScript 可能会使用它来替换不同位置的 HTML。
而且这个方法需要学习JavaScript来创建更复杂的东西。
from flask import Flask, request, render_template_string
import datetime
app = Flask(__name__)
@app.route('/')
def index():
return render_template_string('''
<button onclick="my_function()">Get Time</button>
<span id="time">Press Button to see current time on server.</span>
<script>
span_time = document.querySelector("#time");
function my_function(){
fetch('/get_time')
.then(res => res.text())
.then(text => span_time.innerHTML = text);
}
</script>
''')
@app.route('/get_time')
def time():
return datetime.datetime.now().strftime('%Y.%m.%d %H:%M.%S')
if __name__ == '__main__':
#app.debug = True
app.run() #debug=True
在示例中,我使用render_template_string 而不是render_template 来简化代码 - 现在每个人都可以复制代码并粘贴到一个文件并运行它。