Skip to content

wpotoke/blog-class-based-view

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📰 Blog CBV — Многофункциональный блог на Django (Class-Based Views)

Полноценный блог-проект с древовидными категориями, тегами, комментированием, рейтингами, авторизацией, подтверждением по email, CKEditor5, кешированием и Celery. Создан на основе Django CBV с чистой архитектурой, качественной ORM-оптимизацией и расширенной функциональностью.


🚀 Возможности

  • 🔗 Категории: Древовидная структура категорий с помощью django-mptt
  • 📝 Статьи: Поддержка WYSIWYG-редактора (CKEditor5) для полей description и text
  • 🏷️ Теги: Кастомная интеграция через taggit с собственными моделями
  • 🧠 Комментарии: Древовидная система комментариев с поддержкой AJAX
  • 👍👎 Рейтинг постов: лайки/дизлайки с учётом IP и/или пользователя
  • 🧾 RSS лента: автообновляемая лента последних 5 записей
  • 👤 Регистрация и авторизация: подтверждение email, remember me, редактирование профиля
  • 🔐 reCAPTCHA: защита форм с помощью django-recaptcha
  • ⚙️ Celery + Redis: асинхронная отправка email
  • 🧠 Кеширование: file-based cache + middleware трекинг активности пользователей
  • 💡 Полноценный фронт с JS: обработка лайков, комментариев, редактирования — всё через JS (fetch API)

🛠️ Технологии и библиотеки

Категория Технологии
Backend Python, Django 5.0, Celery, Redis
Frontend HTML, CSS, Bootstrap, JavaScript (AJAX), CKEditor5
Базы данных PostgreSQL / SQLite (настраивается через .env)
Кеширование Django File-Based Cache
Расширения Django django-mptt, taggit, django-ckeditor-5, django-recaptcha, debug-toolbar
Асинхронность Celery + Redis
Безопасность CSRF, капча, подтверждение email

📸 Скриншоты интерфейса

image image image image image image image image


✨ Основной функционал

📚 Категории (MPTT)

  • Используется TreeForeignKey (родительская категория)
  • Отображение и фильтрация по подкатегориям
  • Админ-интерфейс через django-mptt-admin

📝 Посты

  • Статусы: published, draft
  • Слогификация заголовка
  • Миниатюры через ImageField
  • Модельный менеджер PostManager оптимизирует ORM-запросы (select_related, filter(status='published'))
  • Поиск постов по тэгам

🏷️ Теги

  • Кастомная модель CustomTag, slug генерируется автоматически
  • Расширение taggit через TaggableManager

💬 Комментарии

  • Построены с помощью MPTTModel, имеют parent-связь
  • Добавление и редактирование комментариев реализовано через AJAX (comments.js)
  • Отображение вложенной структуры

⭐ Рейтинги

  • Кнопки лайка и дизлайка
  • AJAX-поддержка (rating.js)
  • Уникальность по IP и посту
  • Модельный менеджер PostRatingManager (аннотация Sum по ratings__value)

📧 Регистрация с email-подтверждением

  • Email-верификация через Celery
  • Асинхронная задача send_verification_email_async
  • Использован transaction.atomic() чтобы избежать частичных сохранений

👮 Авторизация

  • LoginView, LogoutView, Remember me реализовано через управление сессиями и куками
  • Расширенные формы регистрации и логина
  • Профиль пользователя: просмотр и редактирование

📡 RSS-лента

  • django.contrib.syndication.views.Feed
  • LatestPostFeed: 5 последних постов по дате обновления

WYSIWYG редактор

  • Для удобства создания и редактирования статей реализован современный WYSIWYG-редактор — CKEditor 5. Подключён и настроен через библиотеку django-ckeditor-5.
  • Редактор подключён к полям description (краткое описание) и text (полный текст статьи)
  • Пользователю доступно форматирование текста, вставка изображений, списков и ссылок
  • Конфигурация кастомизирована: toolbar, стили картинок и кастомный CSS
  • Загруженные изображения автоматически сохраняются в uploads/

🧠 Кеш и Middleware

  • File-based кэш: папка cache/
  • Middleware ActiveUserMiddleware обновляет last_login, кеширует активность

⚙️ Запуск проекта

# Клонируйте репо
git clone https://github.com/wpotoke/blog-class-based-view.git

# Создайте и активируйте venv
python -m venv venv
venv\Scripts\activate

# Установить зависимости 
pip install -r requirements.txt
cd blog_cbv

# Переменные окружения
# или настрой свой

# Выполнить миграции
python manage.py migrate

# Собрать статику
python manage.py collectstatic

# Запуск Redis
redis-server

# Запуск Celery
celery -A blog_cbv worker -l info

# Запустить сервер
python manage.py runserver

✅ TODO (возможные улучшения)

  • 🔎 Поиск по сайту (FullText или Elastic)
  • 📦 API (Django Rest Framework)
  • 📈 Метрики (через Prometheus + Grafana)
  • 📩 Комментарии с автоуведомлением по email
  • 🌍 i18n и локализация

🙌 Автор

Создан с любовью к Django ❤️ Разработчик: [Морозов Данила] Telegram - Морозов Данила