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).
27 lines
1.2 KiB
Python
27 lines
1.2 KiB
Python
from django.urls import path
|
|
|
|
from . import views
|
|
|
|
urlpatterns = [
|
|
# Основные страницы
|
|
path('', views.IndexView.as_view(), name='index'),
|
|
path('about/', views.AboutView.as_view(), name='about'),
|
|
path('projects/', views.ProjectsView.as_view(), name='projects'),
|
|
path('achievements/', views.AchievementsView.as_view(), name='achievements'),
|
|
path('contacts/', views.ContactsView.as_view(), name='contacts'),
|
|
|
|
# Блог
|
|
path('blog/', views.BlogView.as_view(), name='blog'),
|
|
path('blog/category/<slug:category_slug>/', views.BlogView.as_view(), name='blog_category'),
|
|
path('blog/<slug:slug>/', views.ArticleDetailView.as_view(), name='article_detail'),
|
|
|
|
# Аутентификация
|
|
path('register/', views.register_view, name='register'),
|
|
path('login/', views.login_view, name='login'),
|
|
path('logout/', views.logout_view, name='logout'),
|
|
|
|
# API
|
|
path('api/article/<int:article_id>/comment/', views.add_comment, name='add_comment'),
|
|
path('api/article/<int:article_id>/like/', views.toggle_article_like, name='toggle_article_like'),
|
|
path('api/comment/<int:comment_id>/like/', views.toggle_comment_like, name='toggle_comment_like'),
|
|
]
|