Профессиональный персональный веб-сайт портфолио backend-разработчика, созданный на Django. Проект представляет собой полнофункциональную платформу с системой управления контентом, блог-системой с комментариями, интерактивным портфолио проектов и современным адаптивным дизайном.
## 🌟 Основные возможности
- **Система управления контентом** через расширенную Django Admin панель с кастомными инлайнами и фильтрами
- **Блог-платформа** с поддержкой категорий, комментариев, лайков/дизлайков, галерей изображений и прикрепленных файлов
- **Портфолио проектов** с гибкой системой фильтрации по языкам программирования, технологиям и статусам
- **Страница достижений** для демонстрации наград и сертификатов
- **Многоуровневая система комментариев** с возможностью оценки и вложенности до 3 уровней
- **Интеграция с социальными сетями** для автоматической публикации новых статей в Telegram и VKontakte
- **Адаптивный дизайн** с поддержкой всех современных устройств и разрешений
- **SEO-оптимизация** включая динамический sitemap, schema.org разметку и Open Graph метатеги
- **Продвинутая аналитика** с интеграцией Яндекс.Метрики и Google Analytics
- **Безопасность** с использованием Yandex SmartCaptcha и защитой от CSRF/XSS атак
## 🛠 Технологический стек
**Backend:**
- Python 3.8+
- Django 4.2+
- SQLite (разработка) / PostgreSQL (продакшн)
- Pillow для обработки изображений
- Bleach для санитизации HTML
- BeautifulSoup4 для парсинга метаданных ссылок
- Requests для HTTP запросов
**Frontend:**
- HTML5, CSS3 с использованием CSS Custom Properties
- Vanilla JavaScript (ES6+)
- Font Awesome 6.5 для иконок
- Devicon для технологических иконок
- AOS (Animate On Scroll) для анимаций
- Prism.js для подсветки синтаксиса кода
- Google Fonts (Raleway, Inter)
**Интеграции:**
- Yandex SmartCaptcha для защиты форм
- Telegram Bot API для автопостинга
- VK API для публикации в группы
- Schema.org для структурированных данных
**Инфраструктура:**
- Nginx как веб-сервер и reverse proxy
- Gunicorn для WSGI сервера
- Supervisor для управления процессами
- Let's Encrypt для SSL сертификатов
## 📁 Структура проекта
```
deev.space/
├── main/ # Основное Django приложение
│ ├── migrations/ # Миграции базы данных
│ ├── templatetags/ # Кастомные теги и фильтры
│ │ └── custom_filters.py # Фильтры для технологий, времени чтения
│ ├── models.py # Модели данных
│ ├── views.py # Представления и бизнес-логика
│ ├── forms.py # Формы с валидацией
│ ├── admin.py # Административная панель
│ ├── signals.py # Сигналы для автопостинга
│ ├── sitemaps.py # Генерация sitemap
│ ├── context_processors.py # Глобальные контекстные данные
│ └── urls.py # URL маршруты
├── dspace/ # Конфигурация Django проекта
│ ├── settings.py # Настройки приложения
│ ├── urls.py # Корневые URL паттерны
│ ├── wsgi.py # WSGI точка входа
│ └── asgi.py # ASGI точка входа
├── templates/ # HTML шаблоны
│ ├── wrapper.html # Базовый шаблон с SEO
│ ├── index.html # Главная страница
│ ├── about.html # Страница "Обо мне"
│ ├── projects.html # Портфолио проектов
│ ├── achievements.html # Достижения
│ ├── contacts.html # Контакты и форма обратной связи
│ ├── blog/ # Шаблоны блога
│ │ ├── blog.html # Список статей
│ │ └── article.html # Детальная страница статьи
│ ├── auth/ # Шаблоны аутентификации
│ │ ├── login.html # Вход
│ │ └── register.html # Регистрация
│ ├── errors/ # Страницы ошибок
│ │ ├── 404.html # Страница не найдена
│ │ └── 500.html # Ошибка сервера
│ ├── includes/ # Переиспользуемые компоненты
│ │ ├── project_card.html # Карточка проекта
│ │ ├── comments.html # Рекурсивные комментарии
│ │ └── pagination.html # Пагинация
│ └── widgets/ # Кастомные виджеты
│ └── smartcaptcha.html # Yandex SmartCaptcha
├── static/ # Статические файлы
│ ├── css/ # Стили
│ │ ├── variables.css # CSS переменные и дизайн-токены
│ │ ├── base.css # Базовые стили и типографика
│ │ ├── components.css # Переиспользуемые компоненты
│ │ ├── layout.css # Раскладка и сетки
│ │ ├── projects.css # Стили проектов
│ │ ├── blog.css # Стили блога
│ │ ├── pages.css # Страничные стили
│ │ └── media.css # Медиа-запросы
│ ├── js/ # JavaScript
│ │ └── main.js # Основная логика фронтенда
│ └── img/ # Изображения
│ ├── logo.png # Логотип
│ └── favicon.ico # Фавикон
├── media/ # Загружаемые файлы
│ ├── articles/ # Изображения статей
│ │ ├── gallery/ # Галереи статей
│ │ └── files/ # Прикрепленные файлы
│ ├── projects/ # Изображения проектов
│ ├── avatars/ # Аватары пользователей
│ └── site/ # Настройки сайта
├── logs/ # Логи приложения
├── requirements.txt # Python зависимости
├── manage.py # Django CLI утилита
└── README.md # Документация
```
## 🚀 Быстрый старт
### Предварительные требования
Перед началом работы убедитесь, что установлены следующие компоненты:
- Python 3.8 или выше
- pip (менеджер пакетов Python)
- virtualenv или venv (рекомендуется)
- Git для клонирования репозитория
### Установка и запуск
**Шаг 1. Клонирование репозитория**
```bash
git clone https://github.com/EDeev/deev.space.git
cd deev.space
```
**Шаг 2. Создание виртуального окружения**
```bash
python -m venv venv
# Для Linux/macOS:
source venv/bin/activate
# Для Windows:
venv\Scripts\activate
```
**Шаг 3. Установка зависимостей**
```bash
pip install -r requirements.txt
```
**Шаг 4. Настройка переменных окружения**
Создайте файл `.env` в корне проекта со следующим содержимым:
```env
# Django
DJANGO_SECRET_KEY=your-secret-key-here
DJANGO_DEBUG=True
# Email
EMAIL_HOST=smtp.yandex.ru
EMAIL_PORT=465
EMAIL_HOST_USER=your-email@example.com
EMAIL_HOST_PASSWORD=your-password
DEFAULT_FROM_EMAIL=your-email@example.com
CONTACT_EMAIL=your-email@example.com
# Yandex SmartCaptcha
SMARTCAPTCHA_CLIENT_KEY=your-client-key
SMARTCAPTCHA_SERVER_KEY=your-server-key
# Telegram (опционально)
TELEGRAM_BOT_TOKEN=your-bot-token
TELEGRAM_CHANNEL_ID=your-channel-id
# VK (опционально)
VK_ACCESS_TOKEN=your-access-token
VK_GROUP_ID=your-group-id
```
**Шаг 5. Применение миграций базы данных**
```bash
python manage.py migrate
```
**Шаг 6. Создание суперпользователя**
```bash
python manage.py createsuperuser
```
Следуйте инструкциям для создания учетной записи администратора.
**Шаг 7. Сбор статических файлов**
```bash
python manage.py collectstatic --noinput
```
**Шаг 8. Запуск сервера разработки**
```bash
python manage.py runserver
```
Сайт будет доступен по адресу: `http://127.0.0.1:8000`
Административная панель: `http://127.0.0.1:8000/admin`
## 📊 Модели данных
### SiteSettings (Настройки сайта)
Singleton модель для управления глобальными настройками сайта через административную панель. Включает информацию о владельце, контакты, социальные сети и файлы.
**Основные поля:**
- `site_name`, `site_description` - название и описание сайта
- `owner_name`, `owner_title`, `owner_bio` - информация о владельце
- `owner_photo` - фотография
- `owner_email`, `owner_phone`, `owner_city` - контактные данные
- `telegram_url`, `github_url`, `vk_url`, `linkedin_url` - социальные сети
- `resume_file` - файл резюме
### Article (Статьи блога и достижения)
Универсальная модель для статей блога и достижений с поддержкой мультимедиа контента.
**Основные поля:**
- `title`, `slug`, `sub_title` - заголовки и URL
- `excerpt`, `post` - описание и содержание
- `img` - превью изображение
- `category` - категория статьи
- `is_published` - статус публикации
- `comments_enabled` - включение комментариев
- `is_achievement` - флаг достижения
- `views`, `date`, `updated_at` - метаданные
**Связанные модели:**
- `ArticleImage` - галерея изображений
- `ArticleFile` - прикрепленные файлы
- `ArticleLink` - прикрепленные ссылки с автоматическим парсингом метаданных
### Project (Портфолио проектов)
Модель для управления проектами с гибкой системой статусов и отображения.
**Основные поля:**
- `title`, `slug` - название и URL
- `short_description`, `description` - описания
- `features` - список особенностей
- `programming_languages` - языки программирования
- `technologies` - используемые технологии
- `status` - связь с ProjectStatus
- `card_size` - размер карточки (featured/regular/small)
- `show_on_homepage`, `homepage_order` - отображение на главной
- `github_url`, `demo_url` - ссылки
### Experience (Опыт работы)
Детальная информация о профессиональном опыте.
**Основные поля:**
- `title`, `company`, `company_url` - должность и компания
- `description`, `responsibilities` - описание и обязанности
- `technologies` - используемые технологии
- `start_date`, `end_date`, `is_current` - период работы
- Автоматический расчет продолжительности через свойство `duration`
### Education (Образование)
Информация об образовании с поддержкой различных типов.
**Основные поля:**
- `institution`, `degree` - учебное заведение и специальность
- `education_type` - тип (университет/курс/школа)
- `achievements` - список достижений
- `start_year`, `end_year`, `is_current` - период обучения
- `certificate_number`, `certificate_url` - сертификаты
### Comment (Комментарии)
Многоуровневая система комментариев с поддержкой вложенности.
**Основные поля:**
- `article`, `user`, `parent` - связи
- `content` - содержание комментария
- `is_approved` - модерация
- Автоматический расчет уровня вложенности через `nesting_level`
- Подсчет лайков/дизлайков через `CommentLike`
### CustomUser (Пользователи)
Расширенная модель пользователя Django.
**Дополнительные поля:**
- `email` - опциональный email
- `is_verified` - статус верификации
- `avatar` - аватар пользователя
## ⚙️ Конфигурация
### Основные настройки производства
Для развертывания в продакшн среде необходимо изменить следующие параметры в `dspace/settings.py`:
```python
# Безопасность
DEBUG = False
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
ALLOWED_HOSTS = ['deev.space', 'www.deev.space']
# База данных (рекомендуется PostgreSQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'deevspace_db',
'USER': 'deevspace_user',
'PASSWORD': os.environ.get('DB_PASSWORD'),
'HOST': 'localhost',
'PORT': '5432',
}
}
# Безопасность
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
```
### Настройка интеграций
**Автопостинг в Telegram:**
Настройте переменные окружения `TELEGRAM_BOT_TOKEN` и `TELEGRAM_CHANNEL_ID`. При публикации новой статьи автоматически отправляется пост в канал.
**Автопостинг в VKontakte:**
Настройте `VK_ACCESS_TOKEN` и `VK_GROUP_ID` для автоматической публикации в группу VK.
**Email уведомления:**
Настройте SMTP параметры для отправки уведомлений через контактную форму.
## 🌐 Развертывание
Можете прочитать о развёртывании проекта на сервере в статье на моём сайте.
## 📈 Аналитика и мониторинг
Проект интегрирован с системами аналитики для отслеживания поведения пользователей:
**Яндекс.Метрика:**
Автоматически загружается при наличии `YANDEX_METRIKA_ID` в настройках. Отслеживает посещаемость, карты кликов, вебвизор и другие метрики.
**Google Analytics:**
Подключается при указании `GOOGLE_ANALYTICS_ID`. Предоставляет детальную аналитику трафика и поведения пользователей.
**Логирование:**
Настроено детальное логирование с записью ошибок в файлы и вывод информационных сообщений в консоль.
## 🛡️ Безопасность
Проект реализует следующие меры безопасности:
- **CSRF Protection** - защита от межсайтовых запросов через Django middleware
- **XSS Protection** - санитизация пользовательского ввода с помощью Bleach
- **SQL Injection Protection** - использование Django ORM
- **Yandex SmartCaptcha** - защита форм от ботов
- **HTTPS Redirect** - принудительное перенаправление на защищенное соединение
- **HSTS Headers** - заголовки безопасности для браузеров
- **Secure Cookies** - защищенные cookies для сессий
- **Content Security Policy** - настроенные заголовки безопасности
- **Rate Limiting** - защита от перегрузки (рекомендуется настроить на уровне Nginx)
## 👨💻 Автор и контакты
**Деев Егор Викторович**
Backend Developer | Python Specialist
- **Веб-сайт:** [deev.space](https://deev.space)
- **GitHub:** [@EDeev](https://github.com/EDeev)
- **Email:** egor@deev.space
- **Telegram:** [@Egor_Deev](https://t.me/Egor_Deev)
## 📄 Лицензия
Этот проект является некоммерческим и распространяется под лицензией MIT.
---
⭐ Если проект оказался полезным, поставьте звездочку на GitHub!