#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