Нужна помощь в использовании сигналов с Python Flask - PullRequest
0 голосов
/ 12 февраля 2019

Я новичок в Python Flask и мне нужна некоторая информация / базовые знания о том, как использовать Signals с Flask.Мое понимание до сих пор:

Я могу создавать и отправлять собственные сигналы.Я могу использовать этот сигнал для вызова функции.

Мое приложение Flask выглядит примерно так:

@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'))

getTags в rThread что-то делает вне приложения.Но в основном это выглядит так:

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

Я хочу отправить сигнал, когда getTags будет завершен, и приложение Flask должно получить этот сигнал и перенаправить на index.html.

IЯ застрял при создании сигнала, но я понятия не имею, как отправить сигнал и как указать приложению фляги перенаправить на 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 голосов
/ 18 февраля 2019

Веб-сервер не может инициировать событие в клиенте или веб-браузере.Напишите функцию java-скрипта, которая запускается в течение определенного промежутка времени и получает данные с сервера, а затем, если требуется результат, вы перенаправляете на другую страницу.

0 голосов
/ 12 февраля 2019

Если вы просто хотите подождать, пока функция выполнит свою работу, вы можете просто вызвать функцию и затем ответить после нее.Вы использовали 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...