烧瓶 Python 按钮
Posted
技术标签:
【中文标题】烧瓶 Python 按钮【英文标题】:Flask Python Buttons 【发布时间】:2013-11-16 15:55:52 【问题描述】:我正在尝试在一个页面上创建两个按钮。每一个我都想在服务器上执行不同的 Python 脚本。到目前为止,我只使用了一个按钮获取/收集。
def contact():
form = ContactForm()
if request.method == 'POST':
return 'Form posted.'
elif request.method == 'GET':
return render_template('contact.html', form=form)
我需要根据按下的按钮进行哪些更改?
【问题讨论】:
【参考方案1】:将(不同的)名称属性应用于两个按钮,例如
<button name="one">
并在 request.data 中捕获它们。
【讨论】:
你能举例说明如何在 Python 中捕获它们吗?【参考方案2】:为您的两个按钮指定相同的名称和不同的值:
<input type="submit" name="submit_button" value="Do Something">
<input type="submit" name="submit_button" value="Do Something Else">
然后在你的 Flask 视图函数中你可以知道哪个按钮被用来提交表单:
def contact():
if request.method == 'POST':
if request.form['submit_button'] == 'Do Something':
pass # do something
elif request.form['submit_button'] == 'Do Something Else':
pass # do something else
else:
pass # unknown
elif request.method == 'GET':
return render_template('contact.html', form=form)
【讨论】:
我认为最好有不同的名字。并检查名称 - 不是价值。如果 request.form 中的“do_something”... 为什么不用id
而不是name
?在这种情况下会更好。
它也适用于
@Jimilian 我问得有点晚了,但是为什么你认为检查name
而不是value
更好?【参考方案3】:
这样做的适当方法:
@app.route('/')
def index():
if form.validate_on_submit():
if 'download' in request.form:
pass # do something
elif 'watch' in request.form:
pass # do something else
将watch
和download
按钮放入您的模板中:
<input type="submit" name="download" value="Download">
<input type="submit" name="watch" value="Watch">
【讨论】:
watch
和 download
什么?名称属性的值是“watch”和“download”吗?我假设这是必须的,因为 Python if x in dict
语法。我更喜欢这个答案。它只需要澄清一下。【参考方案4】:
我是这样处理的:
<html>
<body>
<form method="post" action="/">
<input type="submit" value="Encrypt" name="Encrypt"/>
<input type="submit" value="Decrypt" name="Decrypt" />
</form>
</body>
</html>
Python 代码:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def index():
print(request.method)
if request.method == 'POST':
if request.form.get('Encrypt') == 'Encrypt':
# pass
print("Encrypted")
elif request.form.get('Decrypt') == 'Decrypt':
# pass # do something else
print("Decrypted")
else:
# pass # unknown
return render_template("index.html")
elif request.method == 'GET':
# return render_template("index.html")
print("No Post Back Call")
return render_template("index.html")
if __name__ == '__main__':
app.run()
【讨论】:
对我来说,这是在 Raspberry PI 上使用 Python3 运行的唯一可行的解决方案 :) 很好的例子,虽然看起来你有一个多余的/div
【参考方案5】:
以防有人像我一样还在寻找并看到这篇 SO 帖子。
<input type="submit" name="open" value="Open">
<input type="submit" name="close" value="Close">
def contact():
if "open" in request.form:
pass
elif "close" in request.form:
pass
return render_template('contact.html')
简单、简洁、有效。甚至不需要实例化表单对象。
【讨论】:
我试图在我自己的烧瓶程序中使用此代码 sn-p,但无法使其工作:# Validate Buttons if "Minute" in request.form: f = open ('testfile.txt', 'w') f.write('min') f.close() @skrhee 确保你用 【参考方案6】:我觉得这个解决方案不错:
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if form.validate_on_submit():
if form.submit.data:
pass
elif form.submit2.data:
pass
return render_template('contact.html', form=form)
表格:
class ContactForm(FlaskForm):
submit = SubmitField('Do this')
submit2 = SubmitField('Do that')
【讨论】:
看起来像 FlaskForm is part of a separate flask_wtf package。【参考方案7】:这项工作对我来说 .py
if request.method == "POST":
if request.form.get('new Token'):
#something
if request.form.get('custom Token'):
#something diferent
.html
<form method="post" >
<input type="submit" name="new Token" value="new Token">
<input type="submit" name="custom Token" value="custom Token">
</form>
之所以有效,是因为您不按下的按钮会将 None 返回给 python。 美好的一天
【讨论】:
以上是关于烧瓶 Python 按钮的主要内容,如果未能解决你的问题,请参考以下文章