Перейти к содержанию

API и endpoints

Справочник всех URL-маршрутов проекта. Это серверный сайт (не REST API): большинство адресов отдают готовые HTML-страницы. Исключение — форма заявки, которая работает через HTMX и возвращает HTML-фрагменты.

Маршруты собираются в config/urls.py и подключённых urls.py приложений.


Страницы (apps.pages)

Путь Имя Метод Описание
/ home GET Главная страница.
/dostavka/ dostavka GET Доставка.
/o-kompanii/ o_kompanii GET О компании (+ галерея сертификатов).
/kontakty/ kontakty GET Контакты и реквизиты.
/politika-konfidencialnosti/ politika GET Политика конфиденциальности.
/soglasie-na-obrabotku-pdn/ soglasie GET Согласие на обработку ПДн.

Два отдельных юридических документа

Политика конфиденциальности и согласие на обработку ПДн — разные страницы по требованию 152-ФЗ. См. Соответствие 152-ФЗ.

Каталог (apps.catalog)

Подключён с префиксом /catalog/.

Путь Имя Метод Описание
/catalog/ category_list GET Список категорий (хаб каталога).
/catalog/<category_slug>/ category_detail GET Категория со списком товаров.
/catalog/<category_slug>/<slug>/ product_detail GET Карточка товара (характеристики + галерея + форма).

Параметры пути — это slug категории и товара. Показываются только записи с is_active=True; для отсутствующих или скрытых — 404.

Запросы оптимизированы: product_detail использует select_related('category') и prefetch_related('specs', 'images'), чтобы не плодить SQL-запросы.

Форма заявки (apps.leads)

Путь Имя Метод Описание
/lead/ lead_form GET / POST Отправка заявки. Работает через HTMX.

Поведение

  • GET — рендерит пустую форму (используется как include на страницах).
  • POST, форма валидна — сохраняет заявку, ставит в очередь уведомления, возвращает фрагмент leads/success.html («спасибо»). Статус 200.
  • POST, ошибки валидации — возвращает фрагмент полей с подсветкой ошибок (leads/form_fields.html). Статус 200 (HTMX подставляет фрагмент на место).
  • Превышен лимит — фрагмент leads/ratelimit.html. Статус 429.

Поля формы

Поле Обязательное Примечание
name да Имя.
phone да Телефон.
email нет Если заполнен — проверяется формат.
comment нет Комментарий.
type Тип заявки (callback / order).
product нет Скрытое поле — pk товара (на карточке товара).
consent да Согласие на обработку ПДн. Без галочки форма не отправляется.
website Honeypot. Невидимое поле-ловушка; если заполнено — заявка отклоняется как спам.

Защита

  • CSRF — на всех POST-запросах (стандарт Django).
  • Honeypot — скрытое поле website; боты его заполняют, люди нет.
  • Rate limit — 5 заявок в час с одного IP. При превышении — 429. В разработке лимит отключён (RATELIMIT_ENABLE=False в dev).

Служебные (apps.core)

Путь Имя Метод Описание
/cookie-consent/ cookie_consent POST Сохраняет выбор пользователя по cookie.

SEO

Путь Метод Описание
/sitemap.xml GET Карта сайта (категории + товары), Django sitemaps.
/robots.txt GET Файл для поисковых роботов.

Админка

Путь Метод Описание
/admin/ GET / POST Панель управления Django. Требует входа администратора.

Работа в админке описана в разделе Добавить контент через админку.

Media (загруженные файлы)

Путь Описание
/media/... Загруженные через админку файлы (фото товаров, сертификаты).

В разработке раздаётся самим Django (только при DEBUG=True). На проде — через отдельный сервис nginx (media).


Сводка кодов ответов

Код Когда
200 Успех; а также фрагменты формы (успех и ошибки валидации).
403 Нет/невалидный CSRF-токен.
404 Несуществующая или скрытая (is_active=False) категория/товар.
429 Превышен лимит заявок (5/час с IP).