Skip to content

Latest commit

 

History

History
403 lines (293 loc) · 18.6 KB

File metadata and controls

403 lines (293 loc) · 18.6 KB

Электронный дневник — School Portal

English version: README.md

Демо: https://anonimpython-private-school.hf.space/login (внешний вид может отличаться от скриншотов ниже)

Система управления школой для частных учебных заведений: расписание, оценки, домашние задания, чат, библиотека, аналитика, отчёты.

Полностью адаптивная мобильная версия — работает на телефонах, планшетах и компьютерах из коробки.

Почему этот проект?

Большинство школьных систем — либо дорогой SaaS (тысячи $/год), либо устаревшее ПО, либо проприетарные лицензии. Этот проект:

  • Бесплатный и open-source (MIT) — никаких скрытых платежей и оплаты за ученика
  • Размещается на вашем сервере — полный контроль над данными, приватность
  • Docker одной командой — не нужен DevOps-инженер
  • Работает без интернета — после установки не зависит от внешних сервисов
  • Полностью настраивается — любые триместры/четверти, шкала оценок, время уроков, название школы

Чем помогает частным школам

Проблема Решение
Учителя часами считают средний балл Автоматические итоги за четверть, печатные отчёты
Родители не видят успеваемость Аналитика ученика с графиками Chart.js
Конфликты в расписании Встроенная проверка на наложение уроков
Бумажные ДЗ теряются Цифровые задания со сроками и фильтрами
Хаос в общении Ролевой чат с индикацией непрочитанного
Дорогая бухгалтерия Зарплатные ведомости, PDF через ReportLab
Приём новых учеников Массовая генерация аккаунтов + карточки с логинами

Скриншоты

главная Главная страница

тёмная тема Тёмная тема

оценки Календарь оценок

детально оценки Детальный просмотр оценок

расписание Расписание

домашние задания Домашние задания

библиотека Библиотека

инфо материала Информация о материале

чат Чат

зарплата Зарплатная ведомость PDF

пользователи Управление пользователями

классы Классы

учителя Список учителей

предметы Управление предметами

генерация паролей Генерация паролей

pdf с логинами PDF-карточки с логинами

новости Новости

задание Задание

все оценки Все оценки


Содержание

  1. Возможности
  2. Быстрый старт
  3. Начальные аккаунты
  4. Конфигурация
  5. Роли и доступ
  6. Структура проекта
  7. Скриншоты
  8. Технологии
  9. Лицензия

Возможности

  • Ролевая модель — Администратор, Директор, Секретарь, Учитель, Ученик с иерархией доступа
  • Оценки — Календарная таблица с цветовой кодировкой (1–5), массовое выставление, отметки о пропусках (Н) и болезни (Б)
  • Расписание — Версионированное, с проверкой конфликтов, настраиваемое время уроков, рабочие дни
  • Домашние задания — С предметными тегами, сроками сдачи, фильтрацией, просрочками
  • Чат — Ролевые контакты, уведомления о непрочитанных, адаптивная боковая панель для мобильных
  • Библиотека — Загрузка PDF-учебников, просмотр в браузере без скачивания
  • Аналитика учеников — Графики Chart.js (линейный, столбчатый, лепестковый, пончик) с адаптивной высотой на мобильных
  • Триместры — 1–4 настраиваемых триместра с автоопределением по дате
  • Отчёты — Итоги по школе, средние баллы классов, зарплатные ведомости с PDF через ReportLab
  • Пароли — Генерация и печать карточек с логинами учеников, экспорт в DOCX
  • Новости — Закреплённые записи, типы (каникулы, объявления, события), даты начала/окончания
  • Тёмная тема — CSS-переменные, переключатель светлой/тёмной темы на всех страницах
  • Мобильная версия — Нижняя навигация, таблицы → карточки на маленьких экранах, тактильные цели (≥44px), поддержка safe-area iOS. Работает на телефонах без установки приложения
  • Docker — Развёртывание одной командой с PostgreSQL + MongoDB

Быстрый старт

Docker (рекомендуется)

git clone https://github.com/AnonimPython/Private-School.git
cd school-portal
cp .env.example .env
docker compose -p school up -d
docker exec school-app-1 python seed_data.py
open http://localhost:8000

Локальный запуск (без Docker)

Требования: PostgreSQL 14+, MongoDB 6+, Python 3.11+

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload

Сброс данных

docker compose -p school down -v
docker compose -p school up -d
sleep 10
docker exec school-app-1 python seed_data.py

Начальные аккаунты

При первом запуске создаются автоматически:

Роль Email Пароль
Директор director@school.ru director123
Админ admin@school.ru admin123
Секретарь secretary@school.ru secretary123

Обязательно смените пароли после первого входа!

После seed_data.py также появятся:

  • 12 учителей (логин: имя.фамилия@school.local, пароль: teacher123)
  • 40 учеников (по 5 на класс), пароль: student123
  • 8 классов (5А–8Б), 12 предметов, расписание, 420+ домашних заданий
  • 4000+ оценок с 1 сентября по 31 мая, включая пропуски (Н) и болезни (Б)
  • Новости, сообщения чата

Конфигурация

Все настройки в config.py, переопределяются через .env или переменные окружения.

Параметр По умолчанию Описание
DATABASE_URL PostgreSQL Подключение к основной БД
MONGO_URL MongoDB Подключение для логов
JWT_SECRET (сменить!) Ключ подписи JWT
SCHOOL_NAME Частная школа Название школы
LESSON_START_TIME 09:00 Время начала первого урока
LESSON_DURATION_MINUTES 45 Длительность урока
WORKING_DAYS 0,1,2,3,4,5 Рабочие дни (Пн–Сб)
TRIMESTER_COUNT 3 Количество триместров

Полный список — в .env.example.


Роли и доступ

Роль Уровень Полномочия
Админ 0 Полный доступ: пользователи, классы, предметы, расписание, ДЗ, логи, отчёты
Директор 1 Всё, кроме логов и управления пользователями
Секретарь 2 Только расписание, библиотека, чат
Учитель 3 Расписание, оценки, ДЗ, аналитика, чат, библиотека
Ученик 4 Свои оценки, ДЗ, расписание, чат, библиотека, аналитика

Структура проекта

├── app/
│   ├── main.py              # Точка входа FastAPI
│   ├── auth.py              # JWT + Argon2id аутентификация
│   ├── crypto.py            # AES-256-GCM шифрование данных
│   ├── update_checker.py    # Проверка обновлений через GitHub
│   ├── database.py          # SQLModel + движок
│   ├── logger.py            # Логирование действий в MongoDB
│   ├── models/models.py     # 10 таблиц SQLModel
│   ├── routers/             # 9 модулей маршрутов
│   │   ├── admin.py         # Пользователи, классы, предметы, отчёты, пароли
│   │   ├── teacher.py       # Оценки, ДЗ, аналитика
│   │   ├── student.py       # Дашборд ученика, оценки, расписание
│   │   ├── auth.py          # Вход/регистрация
│   │   ├── chat.py          # Сообщения
│   │   ├── library.py       # PDF-библиотека
│   │   ├── news.py          # Новости
│   │   └── api.py           # REST API
│   ├── templates/           # 40+ Jinja2-шаблонов
│   └── static/              # CSS, JS, загрузки
├── config.py                # Все настройки
├── seed_data.py             # Генератор тестовых данных
├── docker-compose.yml       # PostgreSQL + MongoDB + app
├── Dockerfile               # Образ приложения
├── requirements.txt         # Python-зависимости
└── .env.example             # Шаблон .env

Настройка и развёртывание

1. Клонирование и конфигурация

git clone https://github.com/your-org/school-portal.git
cp .env.example .env

Отредактируйте .env — укажите название школы, город, JWT-секрет, пароли БД.

2. Docker-запуск (на любом сервере)

docker compose -p school up -d

Запускает 3 контейнера: app (FastAPI), PostgreSQL, MongoDB.

Тестовые данные после первого запуска:

docker exec school-app-1 python seed_data.py

3. Выкладка на удалённый хостинг

Вариант A — VPS с Docker (рекомендуется)

Подключитесь по SSH, затем:

# Установка Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# Клонирование
git clone https://github.com/your-org/school-portal.git
cd school-portal

# Настройка
cp .env.example .env
nano .env   # задать JWT_SECRET, пароли БД

# Запуск
docker compose -p school up -d

Открыть http://ip-вашего-сервера:8000 — готово.

Вариант B — Caddy / Nginx (домен + HTTPS)

Создайте Caddyfile:

vasha-shkola.ru {
    reverse_proxy school-app-1:8000
}

Запустите Caddy в той же Docker-сети:

docker network ls  # найдите "school_default"
docker run -d --network school_default -p 80:80 -p 443:443 \
  -v $PWD/Caddyfile:/etc/caddy/Caddyfile \
  -v caddy_data:/data caddy

Вариант C — Базы данных из Docker для локальной разработки

В docker-compose.yml уже есть PostgreSQL и MongoDB — ваше локальное приложение подключается к ним как к обычным базам.

Стандартные строки подключения для .env:

DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/school_db
MONGO_URL=mongodb://localhost:27017

Порты проброшены на localhost — не нужно устанавливать PostgreSQL и MongoDB вручную.

Вариант D — Боевая эксплуатация

  • DEBUG=false в .env
  • Надёжный JWT_SECRET (openssl rand -hex 32)
  • Укажите MONGO_URL и DATABASE_URL с логином/паролем
  • Перезапуск: docker compose -p school restart

4. Обслуживание Docker

# Логи
docker compose -p school logs -f app

# Пересобрать после изменений кода
docker compose -p school up -d --build

# Сброс всех данных (⚠️ всё удалится)
docker compose -p school down -v
docker compose -p school up -d
docker exec school-app-1 python seed_data.py

# Бэкап базы
docker exec school-db-1 pg_dump -U postgres school_db > backup.sql

5. Локальный запуск (без Docker)

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Требования: PostgreSQL 14+ и MongoDB 6+ запущены локально.


Технологии

  • Бэкенд: Python 3.11, FastAPI, SQLModel, SQLAlchemy async
  • Фронтенд: Jinja2, кастомный CSS (светлая/тёмная тема), Chart.js, ReportLab (PDF)
  • Базы данных: PostgreSQL (основная), MongoDB (логи действий)
  • Аутентификация: JWT (HTTP-only cookies), хеширование паролей через Argon2id (устойчив к GPU/ASIC-атакам)
  • Шифрование: AES-256-GCM — личные данные (паспорта, телефоны, адреса) шифруются в БД с настраиваемым ключом
  • Развёртывание: Docker, Docker Compose

Тестовые аккаунты

После seed_data.py доступны следующие учётные записи:

Роль Email Пароль
Директор director@school.ru director123
Админ admin@school.ru admin123
Учитель петр.петров@school.local teacher123
Ученик иван.иванов@school.local student123

Первый учитель и первый ученик из seed_data — удобно для быстрого тестирования.

Планируется

  • Онлайн-уроки (WebRTC) — учитель показывает экран, ученики видят, чат, микрофон
  • Excel-ведомости — выгрузка оценок класса с баллами и пропусками
  • Характеристики на ученика — автогенерация с подстановкой баллов и поведения
  • Замены учителей — администратор молча переназначает урок другому учителю
  • Модуль питания — меню на неделю, отметки кто ел, отчёты за месяц
  • Тесты и контрольные — учитель создаёт, ученики проходят онлайн, автопроверка
  • QR-отметка посещаемости — учитель показывает QR, ученик сканирует
  • Многоязычность (i18n) — английский, казахский и другие языки

Лицензия

MIT