【问题标题】:How to run python code after running flask function?运行flask函数后如何运行python代码?
【发布时间】:2019-02-20 10:19:20
【问题描述】:

我在下面有一个 python 代码:

def func1():
    return x
def func2():
    return y
x=func1()
y=func2()
z=x+y
products={} #its a nested dictionary containing product details 
@app.route('/')
@app.route('/home')
def home():
    return render_template('home.html', z=z, x=x, y=y)
@app.route('/product/<key>')
def product(key):
    product = products.get(key)
    if not product:
    abort(404)
    return render_template('product.html', product=product)

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

这是我的代码的基本结构。如果我运行这整个程序会执行两次。有没有办法先启动网页浏览器再运行python代码?

【问题讨论】:

  • “被执行两次”是什么意思? “启动网络浏览器”是什么意思? Flask 在服务器上运行,它在每次浏览器访问时提供一个请求,但它不知道也不关心该浏览器何时启动。
  • z=x+y 只执行一次,因为它在 Python 第一次运行脚本时被评估,然后再也不会。
  • (当然,这段代码实际上不起作用,因为xy 没有在模块范围内定义;如果您发布真实代码,也许我们可以提供更好的帮助?)
  • @tripleee 所有函数都会执行两次。当我运行程序时,所有功能都会执行一次,并且服务器会在 Web 浏览器上启动。但是页面是空的。如果我按刷新整个代码再次运行,我会看到结果
  • @DanielRoseman 我不能在这里发布真正的代码,因为它超过 800 行。这就是我的代码花费大量时间运行两次的原因,我正在寻找是否有办法避免它

标签: python python-3.x flask jinja2


【解决方案1】:

在本地路由中调用函数。如下:

def func1():
    return x
def func2():
    return y

@app.route('/')
@app.route('/home')
def home():
    x = func1()
    y = func2()
    z = x + y
    return render_template('home.html', z=z, x=x, y=y)
if __name__ == "__main__":
  app.run(debug = True)

【讨论】:

  • 我其实有两个flask函数,第二个函数也需要数据。如果该数据是在 home() 中定义的,它将可用于 product() 吗?
  • 为公共数据或处理创建一个单独的函数,然后您可以从 home() 以及 product() 调用该函数以获取值并传递给每个模板
  • 有没有办法将数据从一个烧瓶函数传递到另一个?例如,我有一个用于登录的烧瓶功能,它接受用户名和密码。该用户名和密码可以保存并传递给另一个函数吗?
  • 有很多方法可以做到这一点。如果要保存当前用户信息,可以使用 flask-login 扩展。或者,如果您跨页面移动,您可以在会话中保存特定信息。如果您停留在同一页面上,则可以将该信息保存在任何变量中,也可以创建 User 类,并且可以将该信息包含在其对象中。如果您按这些名称搜索,Google 上有大量示例。另外,如果我的回答对您的原始问题有所帮助,请不要羞于接受。
猜你喜欢
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
  • 2021-01-09
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多