Skip to content
kyr1e11Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Schedule Management System

Система управления расписанием

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)

Шаги установки

  1. Клонирование репозитория
git clone <repository-url>
cd bpokurs
  1. Создание виртуального окружения (рекомендуется)
python -m venv venv

# Активация на Windows
venv\Scripts\activate

# Активация на Linux/Mac
source venv/bin/activate
  1. Установка зависимостей
pip install -r requirements.txt
  1. Запуск приложения
python app.py

Приложение будет доступно по адресу: http://localhost:5000

Использование

Доступ к Swagger UI

Откройте в браузере:

http://localhost:5000/apidocs/

Swagger UI позволяет:

  • Просматривать все доступные эндпоинты
  • Читать документацию к каждому эндпоинту
  • Пробовать запросы прямо в браузере
  • Видеть примеры запросов и ответов

Примеры запросов

1. Регистрация пользователя

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"
  }'

2. Вход в систему

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"
  }
}

3. Создание курса (с токеном)

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
  }'

4. Получение расписания на сегодня

curl http://localhost:5000/api/schedules/today

API Эндпоинты

Аутентификация (3 эндпоинта)

  • POST /api/auth/register - регистрация пользователя
  • POST /api/auth/login - вход в систему
  • GET /api/auth/me - информация о текущем пользователе

Курсы (5 эндпоинтов)

  • POST /api/courses - создать курс
  • GET /api/courses - получить все курсы
  • GET /api/courses/{id} - получить курс по ID
  • PUT /api/courses/{id} - обновить курс
  • DELETE /api/courses/{id} - удалить курс

Аудитории (5 эндпоинтов)

  • POST /api/classrooms - создать аудиторию
  • GET /api/classrooms - получить все аудитории
  • GET /api/classrooms/{id} - получить аудиторию по ID
  • PUT /api/classrooms/{id} - обновить аудиторию
  • DELETE /api/classrooms/{id} - удалить аудиторию

Занятия (5 эндпоинтов)

  • POST /api/classes - создать занятие
  • GET /api/classes - получить все занятия
  • GET /api/classes/{id} - получить занятие по ID
  • PUT /api/classes/{id} - обновить занятие
  • DELETE /api/classes/{id} - удалить занятие

Расписание (5 эндпоинтов)

  • GET /api/schedules/student/{id} - расписание студента
  • GET /api/schedules/teacher/{id} - расписание преподавателя
  • GET /api/schedules/classroom/{id}/status - статус аудитории
  • GET /api/schedules/today - занятия на сегодня
  • GET /api/schedules/week - расписание на неделю

Студенты (5 эндпоинтов)

  • POST /api/students - создать студента
  • GET /api/students - получить всех студентов
  • GET /api/students/{id} - получить студента по ID
  • PUT /api/students/{id} - обновить студента
  • DELETE /api/students/{id} - удалить студента

Преподаватели (5 эндпоинтов)

  • POST /api/teachers - создать преподавателя
  • GET /api/teachers - получить всех преподавателей
  • GET /api/teachers/{id} - получить преподавателя по ID
  • PUT /api/teachers/{id} - обновить преподавателя
  • DELETE /api/teachers/{id} - удалить преподавателя

Всего: 35 REST API эндпоинтов

Тестирование

Модульное тестирование (Unit-tests)

Модульные тесты проверяют изолированные компоненты (функции и методы) на корректность логики.

Запуск модульных тестов:

# Запуск всех модульных тестов
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

Интеграционное тестирование (Integration tests)

Интеграционные тесты проверяют взаимодействие нескольких компонентов системы, включая работу с базой данных и внешними сервисами.

Запуск интеграционных тестов:

python test_app.py

Тестирование покрытия (Code Coverage)

Анализ объема кода, задействованного при выполнении тестов.

Запуск с анализом покрытия:

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 - секретный ключ для Flask
  • JWT_SECRET_KEY - секретный ключ для JWT
  • DATABASE_URL - URL базы данных

Безопасность

Реализованные механизмы безопасности

  1. Аутентификация

    • JWT токены с сроком действия 24 часа
    • Хеширование паролей (Werkzeug)
    • Защищенные эндпоинты
  2. Защита от атак

    • SQL инъекции: защита через ORM
    • XSS: валидация и экранирование
    • CSRF: защита через JWT
  3. Валидация данных

    • Проверка обязательных полей
    • Проверка типов данных
    • Проверка уникальности
    • Проверка форматов

Развертывание

Production рекомендации

  1. Использовать WSGI сервер
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:create_app()
  1. Настроить HTTPS
  • Использовать Nginx или Apache как reverse proxy
  • Получить SSL сертификат (Let's Encrypt)
  1. Использовать PostgreSQL
SQLALCHEMY_DATABASE_URI = 'postgresql://user:password@localhost/dbname'
  1. Настроить мониторинг
  • Логирование ошибок
  • Мониторинг производительности
  • Alert system
  1. Использовать виртуальное окружение
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Документация

Требования к курсовой работе

✓ Backend-приложение с REST API
✓ База данных для хранения информации
✓ Создание, редактирование, удаление сущностей
✓ Система аутентификации и авторизации
✓ Функциональное тестирование
✓ Тестирование безопасности
✓ Документация API (Swagger)
✓ Обфускация исходного кода
✓ Кросс-ревью кода

Статистика проекта

  • Количество файлов: 15+
  • Количество строк кода: 2000+
  • API эндпоинтов: 35
  • Моделей базы данных: 6
  • Тестов: 20+
  • Оценка кросс-ревью: 87.5% (Отлично)

Лицензия

Этот проект разработан в рамках курсовой работы.

Контакты

Для вопросов и предложений:

  • Создайте issue в репозитории
  • Свяжитесь с разработчиком

Разработано с ❤️ для управления учебным расписанием

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages