Flask визуализирует страницу загрузки до тех пор, пока не будут сгенерированы результаты (затем загрузите страницу результатов)

#python #html #flask

#питон #HTML #фляжка

Вопрос:

Я очень новичок в Flask (и веб-разработке в целом), но пока я думаю, что у меня вроде все получается?

в любом случае, я хочу создать веб-приложение, в котором пользователь загружает файл, затем файл будет проанализирован с помощью Flask (в основном python и некоторой оболочки), а затем результаты должны быть возвращены пользователю.

У меня до сих пор есть страница, на которой пользователь может загрузить свой файл и где файлу присваивается идентификатор задания. Далее я хочу, чтобы пользователи перенаправлялись на страницу с jobid, которая соответствует URL, @app.route("/<jobid>", methods=['GET', 'POST’]) и чтобы страница загрузки отображалась до тех пор, пока не появятся файлы результатов> затем должна отображаться другая страница.

Проблема: я понятия не имею, как это сделать. Это то, что я получил до сих пор:

питон:

 @app.route("/<jobid>", methods=['GET', 'POST'])
def main_process(jobid):
    if not jobid in JOBID_DICT:
        return render_template("upload_fail.html")
    else:
        des = JOBID_DICT.get(jobid)

        if request.method == "GET":
            return render_template("complete.html", jobid=jobid)

        
        if request.method == "POST": ##POST METHOD does not work yet
            #this is where I need to run the analysis ig? 
            return render_template("results.html")

 

полный html-код:

 {% extends "templates/base.html" %}
{% block title %} 
succesfull upload
{% endblock %}
{% block main %}
<h1>file was uploaded</h1>
<p>starting process</p>
<p>once process is completed page will be refreshed.</p>
<p>Job ID: {{ jobid }} </p>
{% endblock %}
 

results.html:

 {% extends "templates/base.html" %}
{% block title %} 
{{jobid}}
{% endblock %}
{% block main %}
<h1>this the results page</h1>
<p>which I still need to code</p>
{% endblock %}
 

base.html (я использую bootstrap и другие css-файлы, но удалил их для наглядности):

 <!doctype html>
<html lang="en">
<head>
    <title> {% block title %}{% endblock %}</title>
</head>
<body>
    <main>{% block main %}{% endblock %}</main>
</body>
</html>
 

Если бы кто-нибудь мог помочь, это было бы здорово. Я в основном знаю python и R, а мои знания HTML CSS получены примерно 5 лет назад … но я учусь. В любом случае, уже спасибо.

Ответ №1:

Для этого вы можете использовать потоковую обработку.

Поместите задание в поток и когда оно завершится обновите свой пользовательский интерфейс

Вы можете найти больше здесь threading