Скачать PDF

Кирилл Медведев

Frontmatter как контракт

Контент сайта лежит в Markdown-файлах, а frontmatter в них — это схема данных. Пока схема нигде не описана, она всё равно существует: просто живёт в шаблонах, которые молча отрендерят пустоту, если я опечатаюсь в имени поля.

Поэтому каждый frontmatter проходит через Pydantic-модель с extra="forbid". Лишнее поле — ошибка, тег не из списка — ошибка, статус не из трёх допустимых значений — ошибка. Синхронизация падает до записи в базу, и сайт остаётся в прежнем состоянии.

Отдельно проверяю, что slug совпадает с именем файла. slug попадает во внешние ссылки и служит ключом для счётчика просмотров, так что после публикации он неизменяем. Переименованный файл при живом slug внутри — это тихо разъехавшийся URL и обнулённая статистика, и лучше узнать об этом от скрипта, чем от рекрутера с битой ссылкой.

0 просмотров

Ко всем заметкам