mirror of
https://github.com/EDeev/deev.space.git
synced 2026-10-07 20:49:59 +03:00
- README.md и README.en.md: что это, статус, скриншоты, быстрый старт в Docker, установка без Docker, переменные окружения, схема, развёртывание, разработка; - docs/architecture.md (модели, оценки без регистрации, антинакрутка, безопасность) и docs/deploy.md (Docker и устройство боевого сервера) вместо описания моделей в README; - файл LICENSE (MIT), который раньше был заявлен только в README.
4 KiB
4 KiB
Как устроен deev.space
Django-проект dspace с одним приложением main. База — SQLite, статика — whitenoise (в бою — nginx),
шаблоны — Django templates, без фронтенд-фреймворков.
dspace/ настройки, корневые URL, WSGI
main/
models.py модели контента, оценок и настроек сайта
views.py страницы (классовые представления) и JSON-API оценок и комментариев
forms.py формы с очисткой HTML (bleach) и Yandex SmartCaptcha
middleware.py анонимный ID посетителя, хэш IP, фильтр ботов
signals.py действия после публикации статьи (автопостинг, ping Яндекса)
admin.py админка с превью и инлайнами медиа статьи
management/ load_initial_data, populate_demo
templates/ шаблоны страниц, включая includes/ и errors/
static/ CSS по слоям (variables, base, components, layout, pages, media), JS
Модели
| Модель | Назначение |
|---|---|
SiteSettings |
синглтон с текстами сайта, контактами, карточкой-паспортом (SiteSettings.load()) |
CustomUser |
пользователь для комментариев, упрощённая регистрация |
Category, Article |
статьи блога и достижения (is_achievement); slug генерируется из заголовка |
ArticleImage, ArticleFile, ArticleLink |
галерея, вложения и ссылки статьи; у ссылок — автоматическое превью по Open Graph |
Project, ProjectStatus |
проекты портфолио с гибкими статусами |
Skill, Experience, Education |
стек по категориям, опыт и образование |
Comment |
комментарии с ответами до трёх уровней вложенности |
ArticleLike, CommentLike |
лайки и дизлайки — от пользователя или анонимного посетителя |
ArticleView |
уникальный просмотр статьи (один на посетителя) |
ContactMessage |
сообщения с формы обратной связи |
Оценки без регистрации
VisitorMiddlewareвыдаёт каждому посетителю подписанную cookiedspace_vid(uuid4, httponly, год).- Голос привязан к аккаунту, если пользователь вошёл, иначе — к
visitor_id. Повторный клик снимает голос, клик по противоположной кнопке меняет его. - Антинакрутка: с одного хэша «IP + User-Agent» (соль —
SECRET_KEY) — не больше двух новых анонимных оценок одного объекта в сутки. Для loopback и частных адресов хэш не считается, лимит не применяется. - Уникальные просмотры (
ArticleView) пишутся только для посетителей, которыхis_bot()не считает роботами.
Безопасность
- HTML комментариев проходит через
bleach(белый список тегов), из формы обратной связи вырезается весь. - Форма обратной связи защищена Yandex SmartCaptcha.
- Превью ссылок загружаются только с публичных http(s)-адресов.
- С
DJANGO_DEBUG=False: HSTS, редирект на HTTPS, secure-cookie; безDJANGO_SECRET_KEYзапуск невозможен.