【问题标题】:How to include more than one HTML-form in a FLASK view?如何在 FLASK 视图中包含多个 HTML 表单?
【发布时间】:2014-02-12 15:07:29
【问题描述】:

我正在使用 python 2.7flask(我的第一个)构建一个小型 Web 应用程序。

我正在尝试在一个 flask 视图 中包含三个 HTML 表单,以便在一个网页上包含所有三个表单:

  1. 一种允许数据上传的表单(将是一个 XML 文件)
  2. 一键启动 python 进程,对 XML 文件执行分析
  3. 一个按钮,允许下载第 2 步的结果

虽然我得到它的工作,当为三个步骤中的每一个使用单独的视图时,当我试图将所有三个步骤包含在一个视图中时,我无法完成它。有谁知道我做错了什么?

到目前为止,这是我的代码。 HTML 代码包含在 python 脚本中。使用模板也没有帮助我。 HTML 页面正常工作,但按钮不执行任何操作。

...
@app.route('/PAM', methods=['GET', 'POST'])
def start_PAM():
    if request.method == 'POST':
        if "Upload" in request.form.values():
                file = request.files['file']
                if file and allowed_file(file.filename):
                    filename = secure_filename(file.filename)
                    file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
                    print "File upload complete !!"
                    return redirect('/PAM')
        elif "Start PAM" in request.form.values():
                import os
                os.system("D:\Python_Test\PAM\PAM_1st_Try.py")
                print "PAM Process Finished!!"
                return redirect('/PAM')
        elif "Download" in request.form.values():
                filename = "FILE.XML"
                return redirect(url_for('download_file', filename=filename))

    return '''
    <!doctype html>
    <title>Start PAM Process</title>
    <h1>XML Upload</h1>
    <form action="" method=post enctype=multipart/form-data>
      <p><input type=file name=file>
         <input type=submit value=Upload>
    </form>
    <p><h1>Start the PAM Process</h1>
    <form name='Start PAM' method='POST'>
    <p><input type="submit" value="PAM" class="submitButton"/>
    </form>

    <p><h1>Download Result</h1>
    <form name='Download' method='POST'>
    <p><input type="submit" value="Download" class="submitButton"/>
    </form>
    '''

@app.route("/downloads/<filename>")
def download_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename, as_attachment=True)

app.debug = True
if __name__ == '__main__':
    app.run()

【问题讨论】:

  • 一开始为什么要这样做?您的第一个设计(3 个分离的功能)更加直接和可扩展。即使这三个操作是相关的,这也不是将所有代码放在同一个地方的理由。
  • 我想在一个网页中显示三个 HTML 表单。除了将三个视图合二为一之外,还有更好的方法吗?对不起,如果这是一个愚蠢的问题。还是个新手。

标签: python html forms python-2.7 flask


【解决方案1】:

我认为您缺少的步骤是为表单分配一个操作。目前 HTML 不知道如何处理表单?

http://www.w3schools.com/tags/att_form_action.asp

【讨论】:

  • 感谢您的提示。在使用 HTML 模板时,我之前定义了操作。不幸的是,它没有用。我现在再次尝试使用嵌入的 HTML 代码,但它也不起作用。按下按钮什么也没做。看起来 HTML 正在将信息发送到 python 脚本,但脚本不接受它。
猜你喜欢
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2012-01-22
  • 2010-10-16
  • 2019-09-29
  • 2019-07-30
  • 2012-05-28
  • 1970-01-01
相关资源
最近更新 更多