在将Signals与Python Flask结合使用时需要帮助

时间:2019-02-12 06:57:08

标签: python redirect flask raspberry-pi signals

我是Python Flask的新手,并且需要一些有关如何将SignalsFlask一起使用的信息/基础知识。 到目前为止,我的理解:

我可以创建并发送自己的信号。我可以使用此信号进行函数调用。

我的烧瓶应用程序看起来像这样:

@app.route("/")
def start():
    return render_template('index.html')

@app.route("/search")
def search():
    rThread = threading.Thread(target=getTags)
    rThread.start()
    return redirect(url_for('search'))

rThread中的getTags在应用程序之外执行某些操作。 但基本上看起来像这样:

def getTags():
    #do something#
    #now its finished#

我想在完成getTags之后发送一个信号,Flask应用程序应该获得该信号并重定向到index.html。

我一直坚持要创建信号,但是我不知道如何发送信号,以及如何告知flask应用程序如果发送了信号,将重定向到index.html。

感谢您的帮助和建议。

编辑:为澄清起见,用户可以访问更多页面。

@app.route("/details")
def det():
    #do stuff
    return render_template('details.html')

@app.route("/admin")
def adm(): 
    if request.method == "GET":
        #do Stuff
        return redirect(url_for('search'))
    else
        #do Stuff
        return render_template("admin.html")

2 个答案:

答案 0 :(得分:0)

如果您只想等待某个函数完成其工作,则只需调用该函数,然后对其进行响应即可。您使用了threading.thread,因此可以使用threading.Event并等待该函数设置事件:

from flask import Flask, render_template, url_for, redirect
from threading import Thread, Event
from time import sleep


app = Flask(__name__)
event = Event()


@app.route("/")
def start():
    render_template('index.html')


@app.route("/search")
def search():
    rThread = Thread(target=getTags)
    rThread.start()
    event.wait()
    event.clear()
    return redirect(url_for('start'))


def getTags():
    print("doing some processing things")
    sleep(5)
    print("done")
    event.set()


if __name__ == "__main__":
    event.clear()
    app.run(host="localhost", port="8080", debug=True)

答案 1 :(得分:0)

网络服务器无法在客户端或网络浏览器中触发事件。 编写一个运行一定时间间隔并从服务器获取数据的Java脚本函数,然后如果需要结果,则可以重定向到另一页。