mirror of
https://github.com/EDeev/deev.space.git
synced 2026-06-15 11:01:10 +03:00
README
This commit is contained in:
parent
5f2ebd8792
commit
c833cb4f3a
1 changed files with 394 additions and 0 deletions
394
README.md
Normal file
394
README.md
Normal file
|
|
@ -0,0 +1,394 @@
|
|||
# deev.space
|
||||
|
||||
<div align="center">
|
||||
<img src="https://img.shields.io/badge/Python-3.8+-blue.svg" alt="Python Version">
|
||||
<img src="https://img.shields.io/badge/Django-4.2+-green.svg" alt="Django Version">
|
||||
<img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License">
|
||||
<img src="https://img.shields.io/badge/Status-Production-brightgreen.svg" alt="Status">
|
||||
</div>
|
||||
|
||||
Профессиональный персональный веб-сайт портфолио 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/ # Логи приложения
|
||||
├── .env # Переменные окружения
|
||||
├── 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 параметры для отправки уведомлений через контактную форму.
|
||||
|
||||
## 🌐 Развертывание
|
||||
|
||||
Можете прочитать о развёртывании проекта на сервере в <i href="https://deev.space/blog/razvertyvanie-django-proekta-na-servere-s-nulya-do-https/">статье на моём сайте</i>.
|
||||
|
||||
## 📈 Аналитика и мониторинг
|
||||
|
||||
Проект интегрирован с системами аналитики для отслеживания поведения пользователей:
|
||||
|
||||
**Яндекс.Метрика:**
|
||||
Автоматически загружается при наличии `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.
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
<sub>⭐ Если проект оказался полезным, поставьте звездочку на GitHub!</sub>
|
||||
<p><sub>Создано с ❤️ от вашего дорогого - <a href="https://deev.space">deev.space</a> ©</sub></p>
|
||||
</div>
|
||||
Loading…
Add table
Reference in a new issue