Скачиваний:
0
Добавлен:
23.09.2025
Размер:
3.63 Кб
Скачать
from 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)
Соседние файлы в папке новая папка