DmitrMakeev commited on
Commit
8b64810
·
verified ·
1 Parent(s): b6a5636

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -20
app.py CHANGED
@@ -9,6 +9,7 @@ import base64
9
  from dotenv import load_dotenv
10
  import globs
11
  from flask import render_template
 
12
  load_dotenv()
13
 
14
  # Инициализация базы данных
@@ -183,19 +184,29 @@ def get_all_data():
183
  @app.route('/plot_ph', methods=['GET', 'POST'])
184
  def plot_ph():
185
  try:
186
- # Если метод POST, обрабатываем данные из формы
187
  if request.method == 'POST':
188
  start_date = request.form.get('start_date')
189
  end_date = request.form.get('end_date')
190
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  # Преобразуем даты в формат datetime
192
  start_date = datetime.strptime(start_date, '%Y-%m-%dT%H:%M')
193
  end_date = datetime.strptime(end_date, '%Y-%m-%dT%H:%M')
194
 
 
195
  conn = sqlite3.connect('system_data.db')
196
  cursor = conn.cursor()
197
-
198
- # Выполняем запрос для получения данных по параметру ph, dey и wek в заданном диапазоне
199
  cursor.execute('''
200
  SELECT date_time, ph, dey, wek
201
  FROM system_data
@@ -203,34 +214,24 @@ def plot_ph():
203
  ORDER BY date_time
204
  ''', (start_date, end_date))
205
  rows = cursor.fetchall()
206
-
207
  conn.close()
208
 
209
- # Проверяем, есть ли данные
210
  if not rows:
211
  return jsonify({'status': 'error', 'message': 'Нет данных для построения графика в выбранном диапазоне'}), 400
212
 
213
  # Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
214
- dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows] # Дата и время + dey + wek
215
- ph_values = [float(row[1]) for row in rows] # Значения pH
216
 
217
  # Создаем график
218
- plt.figure(figsize=(15, 6)) # Увеличиваем ширину графика
219
- plt.plot(dates, ph_values, marker='o', linestyle='-', color='b') # Точки соединены линией
220
  plt.title('График значений pH')
221
  plt.xlabel('Дата и время')
222
  plt.ylabel('Значение pH')
223
- plt.xticks(rotation=90) # Поворачиваем подписи оси X вертикально
224
  plt.grid(True)
225
-
226
- # Убираем лишние надписи на графике
227
- plt.tick_params(axis='x', which='both', length=0) # Убираем засечки на оси X
228
-
229
- # Автоматическое масштабирование подписей оси X
230
- plt.gca().xaxis.set_major_locator(plt.MaxNLocator(10)) # Отображаем не более 10 подписей
231
-
232
- # Увеличиваем ширину надписей оси X
233
- plt.gcf().subplots_adjust(bottom=0.4) # Увеличиваем пространство снизу для надписей
234
 
235
  # Сохраняем график в буфер
236
  buffer = io.BytesIO()
@@ -250,7 +251,7 @@ def plot_ph():
250
  </html>
251
  '''
252
 
253
- # Если метод GET, отображаем форму для выбора даты и времени
254
  return '''
255
  <html>
256
  <body>
 
9
  from dotenv import load_dotenv
10
  import globs
11
  from flask import render_template
12
+ from flask import session
13
  load_dotenv()
14
 
15
  # Инициализация базы данных
 
184
  @app.route('/plot_ph', methods=['GET', 'POST'])
185
  def plot_ph():
186
  try:
 
187
  if request.method == 'POST':
188
  start_date = request.form.get('start_date')
189
  end_date = request.form.get('end_date')
190
 
191
+ # Сохраняем данные в сессии
192
+ session['start_date'] = start_date
193
+ session['end_date'] = end_date
194
+
195
+ # Перенаправляем на GET с параметрами
196
+ return redirect(url_for('plot_ph'))
197
+
198
+ # Если метод GET, проверяем наличие данных в сессии
199
+ start_date = session.get('start_date')
200
+ end_date = session.get('end_date')
201
+
202
+ if start_date and end_date:
203
  # Преобразуем даты в формат datetime
204
  start_date = datetime.strptime(start_date, '%Y-%m-%dT%H:%M')
205
  end_date = datetime.strptime(end_date, '%Y-%m-%dT%H:%M')
206
 
207
+ # Выполняем запрос для получения данных
208
  conn = sqlite3.connect('system_data.db')
209
  cursor = conn.cursor()
 
 
210
  cursor.execute('''
211
  SELECT date_time, ph, dey, wek
212
  FROM system_data
 
214
  ORDER BY date_time
215
  ''', (start_date, end_date))
216
  rows = cursor.fetchall()
 
217
  conn.close()
218
 
 
219
  if not rows:
220
  return jsonify({'status': 'error', 'message': 'Нет данных для построения графика в выбранном диапазоне'}), 400
221
 
222
  # Разделяем данные на дату и время, а также добавляем значения из столбцов dey и wek
223
+ dates = [f"{row[0]} d: {row[2]} w: {row[3]}" for row in rows]
224
+ ph_values = [float(row[1]) for row in rows]
225
 
226
  # Создаем график
227
+ plt.figure(figsize=(15, 6))
228
+ plt.plot(dates, ph_values, marker='o', linestyle='-', color='b')
229
  plt.title('График значений pH')
230
  plt.xlabel('Дата и время')
231
  plt.ylabel('Значение pH')
232
+ plt.xticks(rotation=90)
233
  plt.grid(True)
234
+ plt.gcf().subplots_adjust(bottom=0.4)
 
 
 
 
 
 
 
 
235
 
236
  # Сохраняем график в буфер
237
  buffer = io.BytesIO()
 
251
  </html>
252
  '''
253
 
254
+ # Если данных в сессии нет, отображаем форму
255
  return '''
256
  <html>
257
  <body>