Архитектура проекта TestPDF

Общая схема архитектуры

TestPDF построен на основе архитектуры Model-View-Template (MVT) фреймворка Django с модульной структурой и четким разделением ответственности между компонентами.

Технологический стек
  • • Django 5.2 (Backend)
  • • Bootstrap 5 + JavaScript + MathJax (Frontend)
  • • PostgreSQL/SQLite (База данных)
  • • Playwright (PDF генерация)
  • • MathJax (LaTeX обработка)
Модели данных
  • • User - управление пользователями
  • • Category - категоризация заданий
  • • Task - управление заданиями
  • • Answer - система ответов
  • • Variant - варианты тестов
  • • Picture - управление изображениями
  • • Assessment_criteria - критерии оценивания
Ключевые модули
  • • Редактор LaTeX формул
  • • Генератор PDF документов
  • • Система управления вариантами
  • • Система управления заданиями
  • • Экспорт/Импорт данных
Архитектурные принципы
  • • MVT архитектура
  • • Асинхронность генерации PDF
  • • Безопасность и авторизация
  • • Модульная структура

Структура приложений

Система разделена на следующие основные Django-приложения:

  • tasks - основное приложение с логикой заданий и вариантов
  • accounts - управление пользователями и аутентификацией
  • variant - логика создания и экспорта вариантов

Архитектура генерации PDF

Система использует асинхронную генерацию PDF на основе Playwright:

  1. Создание HTML-шаблона на основе данных моделей
  2. Асинхронный запуск Playwright для рендеринга HTML
  3. Обработка и оптимизация PDF с настраиваемыми параметрами
  4. Сохранение и возврат готового документа пользователю

Диаграмма моделей данных

Основные сущности системы и связи между ними:

  • User ← создает → Task
  • Task ← имеет → Answer
  • Task ← принадлежит → Category
  • Task ← входит в → Variant
  • Picture ← используется в → Task и Variant
  • Assessment_criteria ← оценивает → Task через Task_criteria_mapping
Преимущества архитектуры
  • Модульность и расширяемость системы
  • Чёткое разделение обязанностей
  • Асинхронная обработка тяжёлых задач
  • Использование современных технологий
  • Безопасность на уровне Django-авторизации
  • Масштабируемость системы