
Добавил:
loolik136
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:новая папка / app
.pyfrom flask import Flask, render_template, request, redirect, url_for, session
import sqlite3
import random
import os
app = Flask(__name__)
app.secret_key = os.urandom(24) # Необходим для работы сессий
# --- Настройка базы данных ---
def init_db():
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Создаем таблицу пользователей, если она не существует
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL
)
''')
# Добавляем пользователей по умолчанию, если их еще нет
try:
cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", ('admin', 'admin'))
cursor.execute("INSERT INTO users (username, password) VALUES (?, ?)", ('user', 'user'))
except sqlite3.IntegrityError:
# Пользователи уже существуют
pass
conn.commit()
conn.close()
# --- Маршруты приложения ---
# Страница входа
@app.route('/', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE username = ? AND password = ?", (username, password))
user = cursor.fetchone()
conn.close()
if user:
session['username'] = user[1]
return redirect(url_for('main'))
else:
error = 'Неверный логин или пароль.'
return render_template('index.html', error=error)
# Главная страница
@app.route('/main')
def main():
if 'username' not in session:
return redirect(url_for('login'))
# Генерируем случайные данные для диаграмм
chart_data = {
'chart1': [random.randint(10, 100) for _ in range(3)],
'chart2': [random.randint(10, 100) for _ in range(3)],
'chart3': [random.randint(10, 100) for _ in range(3)],
}
# Генерируем случайные данные для вкладок
tab_data = {
'tab1': {f'Показатель {i + 1}': random.randint(1000, 5000) for i in range(3)},
'tab2': {f'Индикатор {i + 1}': random.randint(50, 250) for i in range(3)},
'tab3': {f'Метрика {i + 1}': f'{random.uniform(1.0, 100.0):.2f}%' for i in range(3)},
}
# Случайные данные для модальных окон
modal_data = {
'modal1': {f'Детальный показатель {i + 1}': random.randint(100, 1000) for i in range(5)},
'modal2': {f'Детальный индикатор {i + 1}': random.randint(200, 2000) for i in range(5)},
'modal3': {f'Детальная метрика {i + 1}': f'{random.uniform(1.0, 100.0):.2f}%' for i in range(5)},
}
return render_template('main.html', username=session['username'], chart_data=chart_data, tab_data=tab_data,
modal_data=modal_data)
# Выход из системы
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('login'))
if __name__ == '__main__':
init_db()
app.run(debug=True)
Соседние файлы в папке новая папка