diff --git a/README.md b/README.md index ffb6ce0..ddd8a39 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,176 @@ -# Сайт преподавателя физики и математики +
-Сайт Игоря Олеговича Безрукавова для записи на консультации по подготовке к ОГЭ и ЕГЭ. +Игорь Олегович Безрукавов -## Первый запуск +# ИО · physics & math -В терминале PyCharm из корня проекта выполните: +### Персональный сайт преподавателя физики и математики + +Подготовка к ОГЭ и ЕГЭ, индивидуальные консультации и удобная онлайн-запись. + +![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/` | Публичный сайт | +| `http://127.0.0.1:8000/admin/` | Кабинет преподавателя | +| `http://127.0.0.1:8000/privacy/` | Политика конфиденциальности | -1. В админ-панели откройте раздел «Расписание» и добавьте свободные окна. -2. Укажите дату и время, длительность, предмет и формат консультации. -3. После этого свободное время появится в форме на сайте. -4. В разделе «Записи на консультации» новая заявка получает статус «Новая». -5. Подтвердите её вручную или через массовое действие, добавьте ссылку на встречу и при необходимости отметьте напоминание. -6. После занятия измените статус на «Проведена». Отменённые слоты автоматически снова становятся доступными. +## Ежедневная работа преподавателя -На главной странице также доступны политика конфиденциальности, блок вопросов и адаптивная форма записи. +1. Откройте раздел **«Расписание»** в админ-панели. +2. Добавьте свободное окно: дату, время, длительность, предмет и формат. +3. Убедитесь, что у слота включён флаг **«Открыт для записи»**. +4. Новая заявка появится в разделе **«Записи на консультации»**. +5. Проверьте контакты, подтвердите заявку и при необходимости добавьте ссылку на встречу. +6. После занятия переведите заявку в статус **«Проведена»**. -Перед публикацией сайта замените `SECRET_KEY`, отключите `DEBUG` и настройте `ALLOWED_HOSTS` в `config/settings.py`. +Отменённый слот снова становится доступным для записи. Копировать регулярное расписание можно массовым действием **«Создать копии на следующую неделю»**. + +> Важно: сайт показывает только заранее созданные свободные окна. Если в расписании нет слотов, на главной странице будет отображаться `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-уведомление о новой заявке; +- автоматическое подтверждение и напоминание о занятии; +- интеграция с календарём преподавателя; +- онлайн-оплата консультаций; +- личный кабинет ученика; +- публикация отзывов и полезных материалов. + +
+ +
+ +Сделано для спокойной и понятной подготовки к экзаменам. + +