Backend-приложение для управления учебным расписанием с REST API.
Система управления расписанием (Schedule Management System) - это полнофункциональное backend-приложение, разработанное для управления учебным процессом в образовательном учреждении. Система позволяет создавать и управлять курсами, аудиториями, преподавателями, студентами и расписанием занятий.
- Курсы: создание, редактирование, удаление учебных курсов
- Аудитории: управление учебными помещениями и оборудованием
- Преподаватели: ведение базы преподавателей и их расписания
- Студенты: управление списком студентов и их расписанием
- Занятия: создание и управление расписанием занятий
- Просмотр расписания на сегодня
- Просмотр расписания на неделю
- Расписание для конкретного студента
- Расписание для конкретного преподавателя
- Статус аудитории в реальном времени
- JWT аутентификация с токенами
- Хеширование паролей
- Защищенные эндпоинты
- Валидация входных данных
- Защита от SQL инъекций
- Интерактивная Swagger документация
- Описание всех 35 API эндпоинтов
- Примеры запросов и ответов
- Возможность тестирования в браузере
- Backend: Flask 3.0.0
- ORM: Flask-SQLAlchemy 3.1.1
- Аутентификация: Flask-JWT-Extended 4.6.0
- CORS: Flask-CORS 4.0.0
- Документация: Flasgger 0.9.7.1
- База данных: SQLite
- Язык: Python 3.8+
- Python 3.8 или выше
- pip (менеджер пакетов Python)
- Клонирование репозитория
git clone <repository-url>
cd bpokurs- Создание виртуального окружения (рекомендуется)
python -m venv venv
# Активация на Windows
venv\Scripts\activate
# Активация на Linux/Mac
source venv/bin/activate- Установка зависимостей
pip install -r requirements.txt- Запуск приложения
python app.pyПриложение будет доступно по адресу: http://localhost:5000
Откройте в браузере:
http://localhost:5000/apidocs/
Swagger UI позволяет:
- Просматривать все доступные эндпоинты
- Читать документацию к каждому эндпоинту
- Пробовать запросы прямо в браузере
- Видеть примеры запросов и ответов
curl -X POST http://localhost:5000/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "password123",
"role": "admin"
}'curl -X POST http://localhost:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "password123"
}'Ответ:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"username": "testuser",
"email": "test@example.com",
"role": "admin"
}
}curl -X POST http://localhost:5000/api/courses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your_token>" \
-d '{
"name": "Программирование",
"code": "PROG101",
"description": "Курс программирования на Python",
"credits": 4
}'curl http://localhost:5000/api/schedules/todayPOST /api/auth/register- регистрация пользователяPOST /api/auth/login- вход в системуGET /api/auth/me- информация о текущем пользователе
POST /api/courses- создать курсGET /api/courses- получить все курсыGET /api/courses/{id}- получить курс по IDPUT /api/courses/{id}- обновить курсDELETE /api/courses/{id}- удалить курс
POST /api/classrooms- создать аудиториюGET /api/classrooms- получить все аудиторииGET /api/classrooms/{id}- получить аудиторию по IDPUT /api/classrooms/{id}- обновить аудиториюDELETE /api/classrooms/{id}- удалить аудиторию
POST /api/classes- создать занятиеGET /api/classes- получить все занятияGET /api/classes/{id}- получить занятие по IDPUT /api/classes/{id}- обновить занятиеDELETE /api/classes/{id}- удалить занятие
GET /api/schedules/student/{id}- расписание студентаGET /api/schedules/teacher/{id}- расписание преподавателяGET /api/schedules/classroom/{id}/status- статус аудиторииGET /api/schedules/today- занятия на сегодняGET /api/schedules/week- расписание на неделю
POST /api/students- создать студентаGET /api/students- получить всех студентовGET /api/students/{id}- получить студента по IDPUT /api/students/{id}- обновить студентаDELETE /api/students/{id}- удалить студента
POST /api/teachers- создать преподавателяGET /api/teachers- получить всех преподавателейGET /api/teachers/{id}- получить преподавателя по IDPUT /api/teachers/{id}- обновить преподавателяDELETE /api/teachers/{id}- удалить преподавателя
Всего: 35 REST API эндпоинтов
Модульные тесты проверяют изолированные компоненты (функции и методы) на корректность логики.
Запуск модульных тестов:
# Запуск всех модульных тестов
pytest tests/
# Запуск конкретного модуля
pytest tests/test_auth.py
# Запуск с покрытием
pytest --cov=tests --cov-report=html
# Запуск с подробным выводом
pytest tests/test_auth.py -vСтруктура модульных тестов:
tests/
├── test_auth.py # Модульные тесты аутентификации
├── test_courses.py # Модульные тесты курсов
├── test_classrooms.py # Модульные тесты аудиторий
├── test_teachers.py # Модульные тесты преподавателей
├── test_students.py # Модульные тесты студентов
├── test_classes.py # Модульные тесты занятий
├── test_schedules.py # Модульные тесты расписания
└── conftest.py # Конфигурация pytest
Интеграционные тесты проверяют взаимодействие нескольких компонентов системы, включая работу с базой данных и внешними сервисами.
Запуск интеграционных тестов:
python test_app.pyАнализ объема кода, задействованного при выполнении тестов.
Запуск с анализом покрытия:
pytest --cov=tests --cov-report=htmlЗапуск тестов безопасности:
python security_tests.pyТесты безопасности проверяют:
- SQL инъекции
- XSS атаки
- Обход аутентификации
- Валидация входных данных
- Утечка чувствительных данных
- Конфигурация CORS
Для обфускации исходного кода (защита от обратной инженерии):
python obfuscate.pyОпции:
python obfuscate.py --source . --output obfuscatedОбфусцированный код будет сохранен в директорию obfuscated/.
bpokurs/
├── app.py # Основное приложение Flask
├── config.py # Конфигурация приложения
├── models.py # Модели базы данных
├── auth_routes.py # Маршруты аутентификации
├── course_routes.py # Маршруты курсов
├── classroom_routes.py # Маршруты аудиторий
├── class_routes.py # Маршруты занятий
├── schedule_routes.py # Маршруты расписания
├── student_routes.py # Маршруты студентов
├── teacher_routes.py # Маршруты преподавателей
├── test_app.py # Интеграционные тесты
├── security_tests.py # Тесты безопасности
├── obfuscate.py # Скрипт обфускации
├── requirements.txt # Зависимости Python
├── README.md # Этот файл
├── API_ENDPOINTS.md # Описание API эндпоинтов
├── PROJECT_SUMMARY.md # Краткое описание проекта
├── CROSS_REVIEW.md # Отчет о кросс-ревью
├── .gitignore # Git ignore файл
└── instance/ # База данных SQLite
└── schedule_management.db
Конфигурация находится в файле config.py:
class DevelopmentConfig(Config):
"""Development configuration"""
DEBUG = True
TESTING = False
SQLALCHEMY_DATABASE_URI = 'sqlite:///instance/schedule_management.db'
SQLALCHEMY_ECHO = FalseПеременные окружения:
SECRET_KEY- секретный ключ для FlaskJWT_SECRET_KEY- секретный ключ для JWTDATABASE_URL- URL базы данных
-
Аутентификация
- JWT токены с сроком действия 24 часа
- Хеширование паролей (Werkzeug)
- Защищенные эндпоинты
-
Защита от атак
- SQL инъекции: защита через ORM
- XSS: валидация и экранирование
- CSRF: защита через JWT
-
Валидация данных
- Проверка обязательных полей
- Проверка типов данных
- Проверка уникальности
- Проверка форматов
- Использовать WSGI сервер
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:create_app()- Настроить HTTPS
- Использовать Nginx или Apache как reverse proxy
- Получить SSL сертификат (Let's Encrypt)
- Использовать PostgreSQL
SQLALCHEMY_DATABASE_URI = 'postgresql://user:password@localhost/dbname'- Настроить мониторинг
- Логирование ошибок
- Мониторинг производительности
- Alert system
- Использовать виртуальное окружение
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt- Swagger UI: http://localhost:5000/apidocs/
- API Эндпоинты: API_ENDPOINTS.md
- Описание проекта: PROJECT_SUMMARY.md
- Кросс-ревью: CROSS_REVIEW.md
✓ Backend-приложение с REST API
✓ База данных для хранения информации
✓ Создание, редактирование, удаление сущностей
✓ Система аутентификации и авторизации
✓ Функциональное тестирование
✓ Тестирование безопасности
✓ Документация API (Swagger)
✓ Обфускация исходного кода
✓ Кросс-ревью кода
- Количество файлов: 15+
- Количество строк кода: 2000+
- API эндпоинтов: 35
- Моделей базы данных: 6
- Тестов: 20+
- Оценка кросс-ревью: 87.5% (Отлично)
Этот проект разработан в рамках курсовой работы.
Для вопросов и предложений:
- Создайте issue в репозитории
- Свяжитесь с разработчиком
Разработано с ❤️ для управления учебным расписанием