- Весь проект - Admin Panel Attendance
- Моя часть, весь бэкенд - Final-Itam-v
- Бизнес требования проекта - Документ
Проект представляет собой админ-панель для управления посещаемостью и взаимодействия с курсами, построенную с использованием стека технологий:
- Flask (Python) для бэкенда,
- PostgreSQL для базы данных,
- HTML/CSS/JavaScript для фронтенда,
- React.js для создания интерактивных компонентов.
Цель проекта — облегчить администрирование учебного процесса, предоставляя функционал для управления курсами, отслеживания посещаемости, анализа статистики и обратной связи студентов.
Архитектура проекта построена на принципах клиент-серверной модели:
- Бэкенд предоставляет REST API для взаимодействия с базой данных.
- Фронтенд отвечает за отображение данных и пользовательский интерфейс.
Использование Flask позволяет:
- Эффективно обрабатывать запросы,
- Проводить миграции базы данных с помощью Alembic/Flask-Migrate,
- Обеспечивать авторизацию пользователей с использованием Flask-Login.
-
Управление пользователями:
- Регистрация,
- Авторизация,
- Восстановление пароля.
-
Работа с курсами:
- Добавление,
- Редактирование,
- Удаление курсов,
- Привязка студентов и преподавателей.
-
Посещаемость:
- Отметка студентов,
- Фильтрация по курсам, дате и статусу,
- Экспорт данных.
-
Обратная связь:
- Студенты могут оставлять отзывы и оценки занятий,
- Преподаватели анализируют фидбэк.
-
Экспорт данных:
- Выгрузка статистики в формате CSV/Excel.
Проект интегрируется с сервером, где настроены Gunicorn и Nginx для обеспечения производительности и надежности.
GitHub используется для управления версионным контролем и совместной работы.
- Установка всех библиотек из
requirements.txt. - Настройка базы данных через pgAdmin 4.
- Проведение миграций.
- Подключение статических файлов.
- Настройка серверной инфраструктуры.
Проект ориентирован на массовое использование с продуманной архитектурой для обеспечения масштабируемости.
Планируются улучшения:
- Оптимизация UI,
- Добавление аналитических модулей,
- Поддержка новых функций, таких как интеграция с внешними образовательными платформами.
Проект представляет собой админ-панель для управления учебным процессом. Основные цели:
- Автоматизация управления курсами, студентами и преподавателями.
- Упрощение учета посещаемости с возможностью фильтрации данных и экспорта отчетов.
- Анализ обратной связи для повышения качества образовательного процесса.
- Снижение временных затрат преподавателей и администраторов на рутинные операции.
- Создание единой платформы для хранения и управления данными о курсах, студентах, уроках и посещаемости.
- Разработка функционала авторизации и аутентификации для безопасности данных.
- Обеспечение удобного интерфейса для преподавателей и администраторов, включая инструменты фильтрации, статистики и анализа.
- Реализация функций экспорта данных в различных форматах (CSV, Excel) для отчетности.
- Интеграция с серверной инфраструктурой для работы в режиме реального времени.
Проект разработан как инструмент для образовательных учреждений, преподавателей и администраторов. Он обеспечивает:
- Полный цикл управления учебными процессами: от регистрации студентов до анализа их успеваемости.
- Минималистичный и интуитивно понятный пользовательский интерфейс.
- Масштабируемую архитектуру, позволяющую легко добавлять новые функции или поддерживать растущее количество пользователей.
- Отсутствие прозрачности в учете посещаемости:
- В традиционных системах данные о посещаемости ведутся вручную или в разрозненных таблицах, что приводит к ошибкам и потере данных.
- Решение: проект предлагает централизованный учет посещаемости с доступом к истории данных.
- Сложности с анализом данных:
- Обратная связь студентов часто остается неучтенной. Проект систематизирует отзывы и оценки, что помогает преподавателям адаптировать учебный процесс.
- Временные затраты:
- Рутинные задачи, такие как подготовка отчетов или проверка посещаемости, автоматизируются, что позволяет сосредоточиться на ключевых задачах.
- Отсутствие современных технологий в управлении курсами:
- Интеграция бэкенда (Flask) и фронтенда (React.js) обеспечивает современный и функциональный подход к управлению.
- Ограниченный доступ к данным:
- Проект обеспечивает безопасный доступ к данным из любой точки мира благодаря серверной интеграции и поддержке REST API.
Проект направлен на повышение эффективности образовательного процесса, облегчение взаимодействия между участниками и внедрение современных технологий в управление образованием.
Роль: Реляционная база данных, используемая для хранения всех данных, связанных с проектом. PostgreSQL обеспечивает надежное, производительное и масштабируемое хранение данных.
Что хранится:
- Данные пользователей (студенты, преподаватели, администраторы).
- Курсы, уроки, посещаемость, обратная связь и другая учебная информация.
- Структура связана через SQLAlchemy ORM, что упрощает работу с базой на уровне Python.
Особенности:
- Использование индексов для ускорения запросов.
- Поддержка сложных операций через SQL-запросы и агрегаты.
Роль: Основной серверный фреймворк, обеспечивающий обработку запросов, маршрутизацию, и связь между клиентской частью и базой данных.
Задачи Flask:
- Обработка HTTP-запросов (GET, POST, DELETE и др.).
- Связь с базой данных через SQLAlchemy.
- Реализация API для фронтенда (React) через REST.
- Обеспечение авторизации и аутентификации пользователей с использованием Flask-Login.
Подключенные расширения:
- Flask-SQLAlchemy: Для работы с базой данных через ORM.
- Flask-Migrate: Для управления миграциями базы данных.
- Flask-CORS: Для поддержки междоменных запросов между клиентом (React) и сервером (Flask).
- Flask-Login: Для авторизации и управления сеансами пользователей.
Роль: Фронтенд-фреймворк для разработки динамичного и отзывчивого пользовательского интерфейса. React управляет визуализацией и взаимодействием с данными через API.
Использование React в проекте:
- Обработка данных, полученных через API, и их отображение.
- Реализация интерактивных фильтров для работы с курсами, уроками и посещаемостью.
- Построение отзывчивого интерфейса, удобного для преподавателей и студентов.
- Подключение библиотеки Axios для работы с HTTP-запросами.
Почему React:
- Компонентный подход, упрощающий поддержку и расширение функциональности.
- Обновление интерфейса в реальном времени без перезагрузки страницы.
Роль: Основной язык разметки, используемый для создания структуры веб-страниц.
Использование:
- Создание страниц для логина, регистрации, просмотра курсов и посещаемости.
- Использование шаблонов Jinja2 для динамического заполнения данных.
Дополнения:
- Интеграция CSS для стилизации страниц и улучшения их визуального оформления.
Роль: Отвечает за визуальное оформление проекта, обеспечивает современный и аккуратный дизайн страниц.
Использование:
- Создание кастомных стилей через отдельные файлы CSS.
- Использование Bootstrap для адаптивного дизайна (например, для мобильных устройств).
- Определение цветовой схемы, шрифтов и отступов для обеспечения единого стиля.
Роль: Обеспечивает динамическое поведение на фронтенде, такие как обработка событий, отправка данных через AJAX и обновление DOM без перезагрузки страницы.
Примеры использования:
- Реализация выпадающих списков, интерактивных таблиц и уведомлений.
- Интеграция с API для динамического обновления данных.
Роль: Шаблонизатор, используемый Flask для рендеринга HTML-страниц на серверной стороне.
Задачи:
- Генерация динамических страниц с данными из базы.
- Упрощение создания сложных страниц за счет использования циклов, условий и фильтров.
Роль: Контроль версий и управление исходным кодом.
Использование:
- Хранение всех файлов проекта в репозитории GitHub.
- Ведение веток для разработки и основного кода.
- Возможность быстрого клонирования проекта для локального развертывания.
Роль: Веб-сервер, используемый для обработки запросов и балансировки нагрузки.
Особенности:
- Служит прокси между клиентом и Flask-приложением.
- Обеспечивает доставку статических файлов (CSS, JS, изображения).
Роль: WSGI-сервер, который запускает Flask-приложение в продакшене.
Преимущества:
- Обеспечивает высокую производительность.
- Поддерживает многопоточность для обработки большого числа запросов.
Роль: Визуальный инструмент для управления базой данных PostgreSQL.
Использование:
- Управление таблицами и данными.
- Проверка и выполнение SQL-запросов.
Эти технологии работают в тесной связке, обеспечивая надежную серверную часть, динамичный фронтенд и удобное взаимодействие между пользователями и системой.
Проект построен на основе клиент-серверной архитектуры и разделен на несколько ключевых компонентов: бэкенд, фронтенд, база данных и вспомогательные сервисы. Каждая часть отвечает за свою задачу, а их взаимодействие обеспечивает функциональность системы.
- Фреймворк: Flask (Python)
- Роль: Обработка запросов от клиента, управление логикой приложения, связь с базой данных.
Основные задачи:
- Реализация REST API для обработки запросов от фронтенда.
- Управление данными через SQLAlchemy ORM: чтение, запись, обновление данных в базе.
- Авторизация и аутентификация пользователей с использованием Flask-Login.
- Реализация бизнес-логики, включая фильтрацию данных, анализ обратной связи и управление посещаемостью.
- Рендеринг HTML-страниц для определенных маршрутов с использованием Jinja2.
- Фреймворки: React.js (для динамичных страниц), HTML5 и CSS3 (для базовой структуры).
- Роль: Динамичное отображение данных, получение информации с бэкенда, обработка пользовательского ввода.
Основные задачи:
- Обеспечение интерактивности интерфейса, таких как фильтрация, динамическое обновление таблиц и модальных окон.
- Отправка HTTP-запросов к бэкенду через библиотеку Axios.
- Управление состоянием данных на стороне клиента.
- Адаптивный дизайн для работы на разных устройствах (с использованием Bootstrap).
- Система: PostgreSQL
- Роль: Хранение всех данных проекта.
Основные сущности:
- Пользователи: Студенты, преподаватели, администраторы (с ролями).
- Курсы и уроки: Информация о курсах, привязанных преподавателям, и расписания уроков.
- Посещаемость: Данные о статусе присутствия студентов.
- Обратная связь: Отзывы и оценки преподавателей.
- Логи и статистика: Для анализа активности системы.
Взаимодействие:
- SQLAlchemy ORM используется для работы с данными через Python.
- Flask-Migrate управляет миграциями базы данных (создание и изменение таблиц).
-
Фронтенд ↔ Бэкенд:
- Фронтенд отправляет HTTP-запросы (POST, GET) к API бэкенда, используя библиотеку Axios.
- Бэкенд обрабатывает запросы, взаимодействует с базой данных и возвращает ответы в формате JSON.
- Пример: При фильтрации посещаемости фронтенд отправляет параметры (курс, дата), а бэкенд возвращает соответствующие записи.
-
Бэкенд ↔ База данных:
- Через SQLAlchemy выполняются запросы к PostgreSQL.
- Пример: На запрос о посещаемости за определенную дату бэкенд строит SQL-запрос к таблице
attendanceи возвращает данные.
-
Фронтенд ↔ HTML + CSS:
- React динамически изменяет содержимое страницы на основе данных, полученных от бэкенда.
- CSS и Bootstrap обеспечивают стилизацию страниц для создания современного интерфейса.
-
Деплой на сервер (Nginx + Gunicorn):
- Бэкенд запускается через Gunicorn, обеспечивая многопоточность для обработки большого числа запросов.
- Nginx проксирует запросы от пользователей, распределяя их между компонентами.
- Статические файлы (CSS, изображения) сервируются через Nginx.
- PgAdmin 4: Управление базой данных PostgreSQL, выполнение SQL-запросов и настройка схемы базы.
- Git и GitHub: Контроль версий и управление исходным кодом для командной работы и надежного сохранения изменений.
Эта архитектура обеспечивает модульность, масштабируемость и удобство для разработки, тестирования и развертывания проекта.
Бэкенд проекта организован по модульному принципу, что позволяет легко масштабировать функционал и поддерживать читаемость кода. Ниже представлено детальное описание структуры:
app.py: Основной файл для запуска приложения Flask.- Определяет функцию
create_app, которая:- Конфигурирует приложение.
- Подключает базы данных.
- Настраивает миграции, логин-менеджер.
- Регистрирует маршруты.
- Определяет функцию
config.py: Конфигурационный файл с настройками для базы данных, секретных ключей и других параметров..env: Файл с переменными окружения для хранения конфиденциальных данных, таких как параметры базы данных.
routes/:- Содержит модули маршрутов, каждый из которых отвечает за свою часть функционала:
auth.py: Реализует авторизацию, регистрацию, восстановление пароля.teacher.py: Управляет функционалом для преподавателей: посещаемость, экспорт данных, работа с обратной связью.authjson.pyиteacherjson.py: Предоставляют API для взаимодействия с фронтендом.__init__.py: Инициализирует пакет маршрутов.
- Содержит модули маршрутов, каждый из которых отвечает за свою часть функционала:
models.py:- Определяет таблицы базы данных с использованием SQLAlchemy.
- Реализует объектно-ориентированный подход к работе с базой данных.
- Примеры классов:
User: Пользователи.Course: Курсы.Lesson: Уроки.Attendance: Посещаемость.Feedback: Обратная связь.
utils/:- Вспомогательные функции:
- Валидация данных.
- Хелперы для обработки входных данных.
- Вспомогательные функции:
versions/: Содержит файлы миграций базы данных, позволяя отслеживать изменения в её структуре.env.pyиalembic.ini: Конфигурационные файлы для работы с Flask-Migrate.
teacher/:- HTML-шаблоны для страниц, связанных с функционалом преподавателей:
- Управление посещаемостью.
- Анализ обратной связи.
- Экспорт данных.
- HTML-шаблоны для страниц, связанных с функционалом преподавателей:
- Общие шаблоны:
navbar.html: Используется на всех страницах для поддержания единого стиля.
css/style.css:- Файл стилей для визуального оформления страниц.
- Может содержать JS-скрипты для клиентской логики.
requirements.txt: Список всех зависимостей Python, необходимых для запуска проекта.Dockerfile: Предназначен для контейнеризации проекта, что упрощает деплоймент (не реализован в данном проекте).
- Маршруты (
routes):- Принимают запросы от клиента и обрабатывают их.
- Пример: Запрос на
/teacher/attendanceфильтрует данные посещаемости и передаёт их в HTML-шаблон.
- Модели (
models):- Представляют данные и обеспечивают связь с базой данных через ORM SQLAlchemy.
- Шаблоны (
templates):- Рендерятся с помощью Flask-Jinja и передаются клиенту в виде HTML.
- Стили (
static):- Обеспечивают единое визуальное оформление.
-
Клонирование репозитория:
git clone https://github.com/svgbogdnn/adminpanelattendance.git cd adminpanelattendance -
Создание виртуального окружения:
python3 -m venv venv venv\Scripts\activate # Windows
-
Установка зависимостей:
pip install -r requirements.txt
-
Создание базы данных в PostgreSQL:
- Запустите PgAdmin 4 или подключитесь к PostgreSQL через терминал:
CREATE DATABASE dbitam; CREATE USER postgres WITH PASSWORD '1234'; GRANT ALL PRIVILEGES ON DATABASE dbitam TO postgres;
- Убедитесь, что данные подключения совпадают с
SQLALCHEMY_DATABASE_URIвconfig.py.
- Запустите PgAdmin 4 или подключитесь к PostgreSQL через терминал:
-
Миграции базы данных:
flask db init flask db migrate -m "First Migration" flask db upgrade -
Запуск проекта локально:
flask --app app.py run --host=0.0.0.0 --port=5000
-
Доступ к проекту:
- Перейдите в браузер и откройте: http://127.0.0.1:5000.
-
Подключение к серверу:
ssh root@xxx.xxx.xxx.xxx
- Введите пароль в выпадающем окне.
-
Установка необходимых пакетов:
sudo apt update sudo apt install python3-pip python3-venv nginx postgresql postgresql-contrib -y
-
Клонирование репозитория:
mkdir /root/itam cd /root/itam git clone https://github.com/svgbogdnn/adminpanelattendance.git -
Создание виртуального окружения:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txt -
Настройка базы данных:
- Войдите в PostgreSQL:
sudo -u postgres psql
- Выполните команды:
CREATE DATABASE dbitam; CREATE USER postgres WITH PASSWORD '1234'; GRANT ALL PRIVILEGES ON DATABASE dbitam TO postgres;
- Войдите в PostgreSQL:
-
Миграции базы данных:
flask db upgrade
-
Установка Gunicorn:
pip install gunicorn
-
Запуск Gunicorn:
gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app
-
Создание службы для Gunicorn:
- Создайте файл
/etc/systemd/system/gunicorn.service:sudo nano /etc/systemd/system/gunicorn.service
- Пример содержимого:
[Unit] Description=Gunicorn instance to serve the Flask app After=network.target [Service] User=root Group=www-data WorkingDirectory=/root/itam Environment="PATH=/root/itam/venv/bin" ExecStart=/root/itam/venv/bin/gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app [Install] WantedBy=multi-user.target
- Создайте файл
-
Перезагрузка службы:
sudo systemctl daemon-reload sudo systemctl start gunicorn sudo systemctl enable gunicorn
-
Создание конфигурации для домена:
sudo nano /etc/nginx/sites-available/team10
- Пример содержимого:
server { listen 80; server_name team10.itatmisis.ru; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static/ { alias /root/itam/static/; } }
- Пример содержимого:
-
Активация конфигурации:
sudo ln -s /etc/nginx/sites-available/team10 /etc/nginx/sites-enabled sudo systemctl restart nginx
- Проект должен быть доступен по адресу: http://team10.itatmisis.ru/.
Эти шаги обеспечат корректную настройку проекта локально и на сервере.
- Описание: Система позволяет преподавателям отмечать посещаемость студентов, редактировать статусы и просматривать историю посещаемости.
- Функционал:
- Отметка студентов как "присутствующих" (was) или "отсутствующих" (not).
- Возможность массового обновления статусов.
- Фильтрация посещаемости по курсу, дате и статусу.
- Пример использования:
- Преподаватель выбирает курс и дату, отмечает всех студентов как присутствующих, а затем сохраняет изменения.
- Описание: Преподаватели могут создавать, редактировать и удалять курсы.
- Функционал:
- Добавление нового курса с указанием названия, описания, преподавателя и списка студентов.
- Просмотр активных курсов с возможностью фильтрации.
- Пример использования:
- Преподаватель добавляет новый курс, указывает список студентов и задает даты начала и окончания.
- Описание: Возможность создавать и управлять запланированными уроками в рамках курса.
- Функционал:
- Создание уроков с указанием темы, даты, времени и локации.
- Просмотр списка всех уроков по выбранному курсу.
- Пример использования:
- Преподаватель создает урок на 15:00 с темой "Основы NLP" и добавляет информацию о кабинете.
- Описание: Студенты могут оставлять отзывы и оценки уроков, а преподаватели анализировать эти данные.
- Функционал:
- Оставление оценок и комментариев.
- Просмотр преподавателями анонимной статистики обратной связи.
- Пример использования:
- Студент оценивает урок, оставляет комментарий, преподаватель просматривает среднюю оценку за неделю.
- Описание: Генерация отчетов о посещаемости и обратной связи.
- Функционал:
- Экспорт данных в форматах CSV/Excel.
- Возможность фильтрации перед экспортом.
- Пример использования:
- Администратор создает отчет о посещаемости студентов за последние 30 дней и экспортирует его для анализа.
- Описание: Авторизация и регистрация пользователей с разными ролями.
- Функционал:
- Регистрация студентов и преподавателей.
- Авторизация через email и пароль.
- Восстановление пароля через email.
- Пример использования:
- Пользователь, забывший пароль, вводит email и получает ссылку на восстановление.
- Описание: Разделение ролей для студентов, преподавателей и администраторов.
- Функционал:
- У каждого пользователя уникальные права доступа.
- Администраторы могут добавлять новых пользователей и управлять их ролями.
- Пример использования:
- Администратор создает нового преподавателя и предоставляет ему доступ к курсам.
- Описание: Отображение ключевых метрик и графиков в реальном времени.
- Функционал:
- Статистика по посещаемости, курсам и активности пользователей.
- Визуализация данных с помощью графиков.
- Пример использования:
- Преподаватель открывает панель статистики, чтобы узнать, какой урок вызвал наибольший интерес.
- Описание: Простой и интуитивно понятный дизайн для работы с системой.
- Функционал:
- Темная и светлая темы интерфейса.
- Навигация через меню и панель быстрого доступа.
- Пример использования:
- Пользователь переключается между страницами курсов, посещаемости и уроков.
- Описание: Система уведомлений для студентов и преподавателей.
- Функционал:
- Отправка напоминаний о запланированных уроках.
- Уведомления о новых отзывах и комментариях.
- Пример использования:
- Преподаватель получает уведомление о новом комментарии на урок.
Этот функционал делает проект универсальным инструментом для управления образовательным процессом, увеличивая удобство и эффективность взаимодействия между всеми участниками.
-
Интеграция с репозиторием:
- Проект размещен в репозитории GitHub, обеспечивая удобство для версионного контроля, командной работы и хранения исходного кода.
- Используется стандартный Git workflow:
git cloneдля загрузки проекта.git pullдля получения актуальной версии.git pushдля отправки изменений.
- В репозитории структурированы папки для фронтенда, бэкенда, шаблонов, статики и других ресурсов.
-
Преимущества:
- Удобное обновление файлов на сервере через
git pull. - Возможность совместной разработки с использованием веток (например, master, dev).
- Отслеживание всех изменений, их авторов и истории коммитов.
- Удобное обновление файлов на сервере через
-
Авторизация и аутентификация:
- Реализована с помощью библиотеки Flask-Login.
- Пользователи обязаны вводить email и пароль для входа в систему.
- Для пользователей с разными ролями (студенты, преподаватели, администраторы) предусмотрены отдельные права доступа.
- Функция восстановления пароля через email для защиты учетных записей.
-
Хранение паролей:
- Пароли хранятся в базе данных PostgreSQL в зашифрованном виде с использованием библиотеки Werkzeug (bcrypt/sha256).
- Используется метод
generate_password_hash()для хэширования паролей иcheck_password_hash()для проверки введенных данных.
-
Валидация данных:
- Все данные, отправляемые пользователями через формы, проходят строгую проверку с помощью кастомных валидаторов и библиотек валидации.
- Примеры:
- Email проверяется на корректный формат.
- Поля форм ограничиваются длиной и типом вводимых данных.
-
Механизмы защиты:
- CSRF-токены: Flask автоматически генерирует токены для защиты от межсайтовых запросов.
- CORS-защита: Настроена библиотека Flask-CORS для предотвращения неавторизованных запросов с других доменов.
- Ограничение доступа:
- Доступ к страницам ограничен ролями через декораторы.
- Для неавторизованных пользователей предусмотрено перенаправление на страницу входа.
- Защита от SQL-инъекций: Используются подготовленные SQL-запросы через SQLAlchemy.
Очевидно было много ошибок в процессе создания проекта, буквально любое более-менее масштабное внедрение, например, какой-нибудь функции, влекло за собой ошибку, а то и не одну. Еще обиднее, когда ошибки были сделаны по глупости, но, например, с Flask-CORS ошибка точно моя любимая, про нее расписывать слишком долго. Вот основные проблемы:
- Проблема: На этапе подключения базы данных Flask не распознавал соединение с PostgreSQL из-за неверного значения
SQLALCHEMY_DATABASE_URIи отсутствия правильно настроенного драйвера. - Решение:
- Установлен драйвер psycopg2.
- Формат строки подключения (
postgresql://user:password@host/dbname) был приведен в соответствие с документацией. - Добавлены тестовые запросы для проверки соединения через SQLAlchemy.
- Проблема: Статические файлы (CSS, изображения, JavaScript) не подгружались, так как путь в HTML-шаблонах был задан некорректно.
- Решение:
- Настроены пути к статическим файлам через функцию
url_for('static', filename='path/to/file'). - Убедились, что папка
staticнаходится в корне проекта. - Добавлен дополнительный CSS для улучшения визуального отображения страниц.
- Настроены пути к статическим файлам через функцию
- Проблема: Проект начинался с хаотичной структуры без разделения на модули для моделей, маршрутов и утилит, что делало код трудно читаемым.
- Решение:
- Проект был реорганизован:
- Созданы отдельные папки для маршрутов (
routes), моделей (models) и утилит (utils). - Flask Blueprints внедрены для маршрутов
authиteacher, чтобы разделить их логику.
- Созданы отдельные папки для маршрутов (
- Упрощена поддержка за счет четкой структуры.
- Проект был реорганизован:
- Проблема: Проект, запущенный локально, не переносился на сервер корректно. Файлы терялись, статические ресурсы не загружались, а сервер возвращал ошибки.
- Решение:
- Для переноса файлов на сервер использовались команды
scpиgit pull. - На сервере был установлен Gunicorn как WSGI-сервер для запуска приложения.
- Nginx был настроен для обработки запросов и подключения домена.
- Проблемы с портами (например, занятый порт 8000) решались через команды
sudo fuser -k 8000/tcp.
- Для переноса файлов на сервер использовались команды
- Проблема: React и Flask работали в разных средах, а их интеграция требовала продуманной настройки API.
- Решение:
- Созданы REST API в Flask с использованием библиотек Flask-RESTful и Flask-CORS для кросс-доменных запросов.
- React-приложение подключалось к бэкенду через
fetchи Axios. - Отлажен процесс авторизации, передачи токенов и обработки запросов.
- Проблема: Некорректный ввод данных (например, пустые поля или неверные форматы) приводил к падению приложения.
- Решение:
- Реализованы кастомные валидаторы для форм с использованием WTForms и утилит.
- Добавлены сообщения об ошибках на фронтенде через Flask-Flash.
- Проблема: Фронтенд иногда отправлял некорректные запросы, что вызывало 500 ошибки.
- Решение:
- Протестированы все API-эндпоинты с использованием Postman.
- Добавлены проверки на стороне бэкенда, чтобы перехватывать и корректно обрабатывать ошибки.
- Проблема: При добавлении новых моделей или полей миграции не применялись корректно.
- Решение:
- Старые миграции были удалены, а новые созданы заново.
- Добавлены команды для обновления структуры базы данных:
flask db init,flask db migrate,flask db upgrade.
- Проблема: Некоторые маршруты возвращали 404 из-за отсутствия авторизации или неправильной настройки.
- Решение:
- Проверка текущего пользователя (
current_user) добавлена во все защищенные маршруты. - Неправильные URL были перенаправлены на страницу логина.
- Проверка текущего пользователя (
- Проблема: Большая часть проблем возникала из-за недостаточного опыта работы с крупными проектами, особенно в связке с сервером.
- Решение:
- Постепенное изучение документации Flask, PostgreSQL, React, и Nginx.
- Решение проблем по мере их появления с помощью тестирования, логов и поддержки сообщества.
- Удобство учета посещаемости: Преподаватели могут быстро отмечать присутствие или отсутствие студентов, а также просматривать статистику по курсам и урокам. Это значительно сокращает время на административные задачи.
- Сбор и анализ обратной связи: Возможность получать отзывы от студентов о курсах и преподавателях помогает улучшать качество обучения.
- Прозрачность данных: Доступ к отчетам и статистике делает образовательный процесс более прозрачным как для преподавателей, так и для студентов.
- Кроссплатформенность: Проект работает на любых устройствах благодаря современному стеку технологий, включая React, Flask и PostgreSQL.
- Масштабируемость: Архитектура позволяет легко добавлять новые функции, например управление заданиями, уведомления или автоматическую генерацию сертификатов.
- Гибкая настройка: Преподаватели могут фильтровать данные по курсам, статусу или дате, что делает работу с платформой максимально удобной.
- Интуитивный интерфейс: Понятный и минималистичный дизайн, подходящий как для преподавателей, так и для студентов.
- Удобная регистрация и авторизация: Включает традиционную форму входа и возможность интеграции с Google.
- Доступность: Сайт адаптирован для работы на мобильных устройствах, что удобно для пользователей в дороге.
- Работа с базой данных: PostgreSQL предоставляет мощный и надежный инструмент для хранения больших объемов данных.
- Связь между фронтендом и бэкендом: React обеспечивает динамичное и быстрое отображение данных, а Flask позволяет создавать надежный API для обработки запросов.
- Генерация отчетов: Быстрое формирование отчетов по посещаемости и обратной связи экономит время преподавателей.
- Групповое редактирование данных: Функции массового обновления статусов посещаемости упрощают управление большими группами студентов.
- Экспорт данных: Интеграция с Excel позволяет создавать удобные таблицы для дальнейшего анализа.
- Защищенные данные: Использование современных методов хэширования паролей и проверка на уровне валидаторов предотвращает несанкционированный доступ.
- Авторизация и права доступа: Гибкая система ролей обеспечивает доступ к функциям только для авторизованных пользователей.
- Целенаправленный подход: Проект разработан специально для образовательных учреждений, что делает его более подходящим, чем универсальные CRM-системы.
- Комбинация технологий: Уникальная интеграция React и Flask предоставляет высокую производительность и удобство для конечных пользователей.
- Адаптация под нужды пользователей: Возможность настроить функционал под специфические требования конкретного учебного заведения.
- Документированная архитектура: Подробное описание структуры проекта упрощает поддержку и внедрение новых возможностей.
- Связь с GitHub: Наличие версионного контроля позволяет команде отслеживать изменения и быстро исправлять ошибки.
- Обучающий эффект: Проект служит хорошей основой для освоения современных технологий и инструментов разработки.
Проект уже реализует базовый функционал для управления посещаемостью, обратной связью, курсами и статистикой. Однако есть множество направлений для его улучшения:
- Описание:
- Добавление раздела с персонализированной статистикой, графиками прогресса, историей посещаемости и достижениями.
- Возможность загружать и редактировать аватар.
- Описание:
- Поддержка OAuth авторизации через Google, Facebook и другие популярные сервисы.
- Реализация двухфакторной аутентификации (2FA) для повышения безопасности.
- Описание:
- Валидация данных в реальном времени на клиентской стороне.
- Возможность регистрации через приглашения от преподавателей.
- Описание:
- Полная интеграция с фронтендом React для улучшения пользовательского опыта.
- Личный кабинет студента с отображением домашних заданий, уведомлений и статистики.
- Описание:
- Визуализация данных в реальном времени с использованием графиков и диаграмм.
- Возможность добавлять и редактировать курсы и занятия прямо с дашборда.
- Описание:
- Поддержка экспорта данных в PDF, CSV и другие форматы.
- Добавление гибких фильтров для создания отчетов.
- Описание:
- Введение анонимных отзывов и рейтингов.
- Возможность преподавателям оставлять публичные ответы на отзывы.
- Описание:
- Переработка запросов к базе данных для сокращения времени отклика при большом количестве пользователей.
- Введение кеширования наиболее часто запрашиваемых данных.
- Описание:
- Добавление системы пуш-уведомлений для новых заданий или изменений в расписании.
- Описание:
- Оптимизация интерфейса под мобильные устройства.
- Возможность создания мобильного приложения на основе текущей архитектуры.
Эти улучшения сделают проект более функциональным, удобным и готовым к использованию в масштабах крупных учебных заведений.