Я работаю над проектом, встроенным в Flask, который будет отображать результаты анализа на графиках Боке. Я все еще на ранней стадии разработки и хотел бы получить мнения и советы.
Приложение позволит пользователям формировать запрос SQL на основе формы html. Это будет / index маршрут приложения Flask. Нечто похожее на это:
<form action="/Dashboard_1">
<label for="birthday">Choose the Start Date:</label>
<input type="date" id="date_start" name="date_start">
<input type="submit">
</form>
База данных содержит временные ряды с различными полями. Обычно на каждой сессии я собираю несколько тысяч строк данных. Затем данные извлекаются из базы данных, а затем на следующих нескольких маршрутах (/ Dashboard_1 и / Dashboard_2) выполняется анализ и результаты выводятся на график. Пользователь должен иметь возможность выбирать, какие поля будут отображаться, а также пользователь должен иметь возможность переключаться между / Dashoboard_1 и / Dashboard_2 без необходимости повторного запроса к базе данных и повторного анализа.
Что Я борюсь с тем, как сохранить результаты анализа и данные между различными инструментальными панелями / маршрутами.
Сначала я подумал, что могу использовать встроенный API-интерфейс примерно так:
@/app.route('/Dashboard_1', methods=['GET', 'POST'])
def dashboard():
if request.method == 'POST':
sql_data, VARIABLE_1, VARIABLE_2 = retrieve_data(...# Does the SQL query and returns the data deom SQL)
df_data = module_analysis(... # Does the analysis and returns a Pandas DataFrame)
script, div = components(plot_dash(source, plot_width=450)) # Does the Bokeh Plots
session['VARIABLE_1'] = VARIABLE_1
return render_template('dashboard_1.html', VARIABLE_1=VARIABLE_1, script=script, div=div)
И dashboard_1.html
будет:
{% extends 'base.html' %}
{% block head %}
<title>Performance Analytics dashboard</title>
<script src="https://cdn.bokeh.org/bokeh/release/bokeh-2.0.1.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.0.1.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.0.1.min.js" crossorigin="anonymous"></script>
{{ script|safe }}
{% endblock %}
{% block body %} <h1>This is the first dashboard</h1>
{{ div|safe }}
{% endblock %}
Это работает, но не позволит перемещаться по разным маршрутам без необходимости повторного анализа. Я думал о передаче сценария и div каждого графика как Flask session
переменных, но это лучший способ сделать это? Должен ли я передавать df_data
как переменную Session или она слишком велика для этого?