# deev.space
Python Version Django Version License Status
Профессиональный персональный веб-сайт портфолио 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!

Создано с ❤️ от вашего дорогого - deev.space ©