Игорь Олегович Безрукавов # ИО · physics & math ### Персональный сайт преподавателя физики и математики Подготовка к ОГЭ и ЕГЭ, индивидуальные консультации и удобная онлайн-запись. ![Python](https://img.shields.io/badge/Python-3.10%2B-3776AB?style=flat-square&logo=python&logoColor=white) ![Django](https://img.shields.io/badge/Django-5.x-0C4B33?style=flat-square&logo=django&logoColor=white) ![SQLite](https://img.shields.io/badge/SQLite-development-003B57?style=flat-square&logo=sqlite&logoColor=white) ![Status](https://img.shields.io/badge/status-in%20development-ee7046?style=flat-square)

## О проекте Сайт Игоря Олеговича Безрукавова — преподавателя физики и математики, выпускника АГУ с опытом преподавания и репетиторства более 10 лет. Главная задача проекта — превратить первый интерес ученика в понятный путь к консультации: показать подход преподавателя, помочь выбрать свободное время и сохранить заявку в рабочем кабинете. ## Возможности | Для ученика | Для преподавателя | | --- | --- | | Адаптивный лендинг с личной подачей | Дашборд с ключевыми показателями | | Раздельные направления: физика и математика | Управление свободными окнами | | ОГЭ, ЕГЭ и школьная программа | Статусы заявок от «Новая» до «Проведена» | | Выбор класса, формата и свободного времени | Быстрые массовые действия | | Защита от двойной записи на один слот | Ссылка на онлайн-встречу и заметки | | Политика конфиденциальности и согласие | Фильтры, поиск и история изменений | ### Как работает запись ```text Преподаватель открывает время в админке ↓ Свободный слот появляется на сайте ↓ Ученик заполняет форму и выбирает слот ↓ Заявка появляется в кабинете преподавателя ↓ Подтверждение → консультация → статус «Проведена» ``` ## Технологии - **Backend:** Django 5, Python - **Database:** SQLite для разработки - **Frontend:** Django Templates, HTML, CSS - **Admin:** кастомизированная Django Admin с дашбордом - **Static:** локальные CSS и изображения - **Timezone:** `Europe/Astrakhan` ## Быстрый запуск ### 1. Установка зависимостей В терминале PyCharm, находясь в корне проекта: ```powershell .\.venv\Scripts\python.exe -m pip install -r requirements.txt ``` ### 2. Подготовка базы ```powershell .\.venv\Scripts\python.exe manage.py migrate .\.venv\Scripts\python.exe manage.py createsuperuser ``` Команда `createsuperuser` попросит придумать логин и пароль для кабинета преподавателя. ### 3. Запуск ```powershell .\.venv\Scripts\python.exe manage.py runserver ``` После запуска: | Адрес | Назначение | | --- | --- | | `http://127.0.0.1:8000/` | Публичный сайт | | `http://127.0.0.1:8000/admin/` | Кабинет преподавателя | | `http://127.0.0.1:8000/privacy/` | Политика конфиденциальности | ## Ежедневная работа преподавателя 1. Откройте раздел **«Расписание»** в админ-панели. 2. Добавьте свободное окно: дату, время, длительность, предмет и формат. 3. Убедитесь, что у слота включён флаг **«Открыт для записи»**. 4. Новая заявка появится в разделе **«Записи на консультации»**. 5. Проверьте контакты, подтвердите заявку и при необходимости добавьте ссылку на встречу. 6. После занятия переведите заявку в статус **«Проведена»**. Отменённый слот снова становится доступным для записи. Копировать регулярное расписание можно массовым действием **«Создать копии на следующую неделю»**. > Важно: сайт показывает только заранее созданные свободные окна. Если в расписании нет слотов, на главной странице будет отображаться `0` свободных мест. ## Статусы заявок | Статус | Когда использовать | | --- | --- | | **Новая** | Заявка пришла с сайта и ещё не обработана | | **Подтверждена** | Время согласовано с учеником | | **Проведена** | Консультация состоялась | | **Отменена** | Занятие отменено, слот можно использовать снова | | **Не пришёл** | Ученик не подключился или не пришёл | ## Структура проекта ```text teacher_site/ ├── config/ # настройки и маршруты Django ├── consultations/ # основное приложение │ ├── migrations/ # миграции базы данных │ ├── templates/ │ │ ├── admin/ # дашборд и тема админ-панели │ │ └── consultations/ # публичные страницы │ ├── admin.py # расписание, заявки и действия │ ├── forms.py # форма записи и валидация │ ├── models.py # слоты и записи │ └── views.py # публичные страницы ├── static/ │ ├── admin/css/ # оформление кабинета │ ├── css/ # оформление сайта │ └── images/ # фотография преподавателя ├── manage.py ├── requirements.txt └── README.md ``` ## Проверка проекта ```powershell .\.venv\Scripts\python.exe manage.py check .\.venv\Scripts\python.exe manage.py makemigrations --check --dry-run ``` Обе команды должны завершиться без ошибок и сообщений о новых миграциях. ## Перед публикацией В `config/settings.py` обязательно: - заменить `SECRET_KEY` на секретное значение; - установить `DEBUG = False`; - указать домен в `ALLOWED_HOSTS`; - настроить `STATIC_ROOT` и выполнить `collectstatic`; - заменить SQLite на PostgreSQL, если проектом будут пользоваться постоянно; - настроить резервное копирование базы и защиту админ-панели. Для автоматических уведомлений в Telegram или по email понадобятся отдельные токены и данные для подключения. Сейчас заявки надёжно сохраняются в админ-панели, а поле напоминания позволяет отмечать обработку вручную. ## Идеи для следующего этапа - Telegram-уведомление о новой заявке; - автоматическое подтверждение и напоминание о занятии; - интеграция с календарём преподавателя; - онлайн-оплата консультаций; - личный кабинет ученика; - публикация отзывов и полезных материалов.
Сделано для спокойной и понятной подготовки к экзаменам.