mirror of
https://github.com/EDeev/deev.space.git
synced 2026-10-07 20:49:59 +03:00
- render_tech_badge: format_html вместо mark_safe с непроверенной подстановкой (XSS); - превью ссылок статьи: только публичные http(s)-адреса, без запросов во внутреннюю сеть сервера (SSRF); ошибки логируются вместо except: pass; - автопостинг в Telegram переведён на parse_mode=HTML с html.escape (раньше в канал уходили видимые обратные слэши), включается переменной SOCIAL_AUTOPOST; - убран ping Google (эндпоинт отключён в 2023 году); - ошибка отправки письма с формы обратной связи больше не глушится; - whitenoise и DJANGO_SERVE_MEDIA для запуска без nginx; - импорты упорядочены, неиспользуемые удалены (ruff).
40 lines
870 B
Python
40 lines
870 B
Python
from django.contrib.sitemaps import Sitemap
|
|
from django.urls import reverse
|
|
|
|
from .models import Article, Project
|
|
|
|
|
|
class ArticleSitemap(Sitemap):
|
|
changefreq = 'weekly'
|
|
priority = 0.8
|
|
|
|
def items(self):
|
|
return Article.objects.filter(is_published=True)
|
|
|
|
def lastmod(self, obj):
|
|
return obj.updated_at
|
|
|
|
def location(self, obj):
|
|
return obj.get_absolute_url()
|
|
|
|
|
|
class ProjectSitemap(Sitemap):
|
|
changefreq = 'monthly'
|
|
priority = 0.7
|
|
|
|
def items(self):
|
|
return Project.objects.filter(is_visible=True)
|
|
|
|
def location(self, obj):
|
|
return f'/projects/#{obj.slug}'
|
|
|
|
|
|
class StaticViewSitemap(Sitemap):
|
|
priority = 0.5
|
|
changefreq = 'monthly'
|
|
|
|
def items(self):
|
|
return ['index', 'about', 'projects', 'blog', 'achievements', 'contacts']
|
|
|
|
def location(self, item):
|
|
return reverse(item)
|