【问题标题】:Flask Python Buttons烧瓶 Python 按钮
【发布时间】: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)

我需要根据按下的按钮进行哪些更改?

【问题讨论】:

    标签: python html button flask


    【解决方案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
    

    watchdownload 按钮放入您的模板中:

    <input type="submit" name="download" value="Download">
    <input type="submit" name="watch" value="Watch">
    

    【讨论】:

    • watchdownload 什么?名称属性的值是“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 确保你用
      标签包裹了&lt;input&gt;。通过一些故障排除,您应该能够确定您的视图函数是否被调用,然后“Minute”是否在request.form对象中以找出问题所在。
    【解决方案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')
    

    【讨论】:

    【解决方案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。 美好的一天

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 2021-01-02
      • 1970-01-01
      • 2021-11-07
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多