Обычный проект-портфолио на Django, который я пилил для демонстрации разных штук — тут и REST API, и вебсокеты, и Celery, и чистый JS без фреймворков.
Стек: Python 3.12, Django 5, DRF, Channels, Celery, Postgres 16, Redis 7. На фронте семантическая вёрстка и ванильный JavaScript (ES6 модули), без React/Vue.
Структура примерно такая: !!!проект очень сложный в бэкэнд части все кнопки логирование и тд осуществляется с помощью postgreSQL, redis, web-server-а daphne и celery-worker. Поэтому я не могу захостить его на бесплатный Vercel.
config/— настройки Django, asgi, celeryapps/core/— кастомный User (UUID, логин через email), абстрактная модель с timestampsapps/showcase/— основные фичи (таски, медиа, чат, вебсокеты)apps/api/— DRF viewset'ы, сериалайзеры, кастомный рендерер, пагинацияstatic/js/— модульный JS (api-обёртка, toast, modal, модули страниц)templates/— django-шаблоны
Пять страниц-модулей:
- Dashboard — приветствие с печатающейся анимацией, статистика из БД, рисованный через Canvas график по приоритетам задач, системные метрики (CPU/память/диск)
- Data Grid — CRUD-таблица с inline-редактированием (двойной клик по строке), drag-and-drop сортировкой (сохраняет порядок на бэкенде), поиском и фильтрами. Кнопка экспорта в CSV через Celery-таску
- Real-Time Terminal — чат на WebSockets с авто-реконнектом. Сервер раз в 5 секунд пушит статус (CPU/память). Терминальный интерфейс с историей сообщений
- Media Upload — drag-and-drop зона загрузки изображений с прогресс-баром. На бэке проверка по magic bytes, Pillow создаёт WebP-превьюшки
- Security Playground — три теста: XSS-санитизация через bleach, rate-limit кнопка (при 429 показывается кулдаун-таймер), просмотр security-заголовков
- Копируем
.env.exampleв.envи подставляем свои значения (особенноSECRET_KEY) docker compose up- Открываем
http://localhost:8000
Если вперые, то контейнер сам накатит миграции, соберёт статику и засеет тестовые данные (три юзера, 30 задач, 10 сообщений в чате).
Пароль для всех тестовых юзеров: Demo@Password123!
Если надо локально без докера:
- ставим PostgreSQL и Redis
pip install -r requirements.txtpython manage.py migratepython manage.py seed_datadaphne -b 0.0.0.0 -p 8000 config.asgi:application
Bleach на всём пользовательском вводе, CSP через django-csp, CORS только с указанных origin, X-Frame-Options DENY, rate-limiting через Redis, кастомный валидатор паролей, проверка файлов по magic numbers, UUID для всех первичных ключей.
Spa-подобная навигация без перезагрузки (Fetch + History API), но если JS отключен — обычные django-переходы работают. Тёмная тема по умолчанию, светлая сохраняется в localStorage. Все DOM-манипуляции через textContent (не innerHTML для пользовательских данных).



