为了账号安全,请及时绑定邮箱和手机立即绑定

强制 Flask 在函数执行前等待表单提交事件

强制 Flask 在函数执行前等待表单提交事件

梵蒂冈之花 2022-11-09 16:32:22
我正在构建我的第一个 Flask 应用程序,并拥有以下带有路由的应用程序:from flask import Flask, render_template, request from dbConnect import get_config_tablesimport pandas  app = Flask(__name__)@app.route('/config', methods=["POST", "GET"])def config_reader():    ID = request.form.get("ID")    inputID = 12036    result = get_config_tables(inputID)    df = result.head(10)    return render_template('config.html',  inputID = ID, tables=[df.to_html(classes='data', header = "true")])if __name__ == '__main__':    app.run(debug=True)该函数get_config_tables是我编写的一个 python 函数,它与 SQL Server 通信并获取一些表。当我将函数硬编码inputID到get_config_tablesFlask 应用程序中按预期运行时,HTML 按预期打印到屏幕上。但是,当我尝试传递值时,我得到了ID错误get_config_tables(ID)。我认为Flask 试图在传递 ID 值之前执行我的函数,但由于该函数需要输入值,因此在输入有效值之前它将失败。有没有办法可以强制 Flask 等待执行该函数get_config_tables,直到单击提交事件按钮?如果需要任何进一步的信息来更好地理解我的问题,我很乐意提供。对应的 HTML 是:{% extends "layout.html" %}{% block body %}<h6>Get a config table<br><br><form action = "{{url_for('config_reader')}}" method = "POST">    <input type = "text" name = "ID" placeholder = "Enter a confid ID">    <button> Submit </button>You entered {{inputID}}.<hline><br><br>The results are:<br></h6> <small><center>{% for table in tables %}            {{ table|safe }}{% endfor %}</center></small>{% endblock %}
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

在我看来,即使没有 ID,您也在使用此页面,因为您的表格与表格位于同一页面上。


这意味着不是每次您的端点被命中时,都会随请求发送一个 ID,您会看到您还注册了一个 GET 方法。通常,该 ID 不会出现在该请求中。


因此,您需要检查此 id 是否确实存在,然后才尝试发送您的表数据。


所以我能想出的最幼稚的方法就是使用 if 语句来检查 id 是否存在。


@app.route('/config', methods=["POST", "GET"])

def config_reader():

    ID = request.form.get("ID")


    t = get_config_tables(ID).head(10).to_html(

        classes='data', header = "true"

    ) if ID else '<table></table>'


    return render_template('config.html',  inputID = ID, tables= [t])


我没有对此进行测试,但这是如何检查 id 的要点。


查看完整回答
反对 回复 2022-11-09
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信