
Пагинация в Django: как делать правильно
OFFSET/LIMIT на большой таблице заставляет базу перебирать всё до нужной страницы. Разбираем, где ломается стандартный Paginator и когда переходить на пагинацию по курсору.

OFFSET/LIMIT на большой таблице заставляет базу перебирать всё до нужной страницы. Разбираем, где ломается стандартный Paginator и когда переходить на пагинацию по курсору.

Фильтр по связанным полям через несколько .filter() возвращает не то, что ждёшь, а один невинный вызов внутри цикла разворачивается в сотни SQL-запросов. Разбираем ошибки, которые бьют по корректности и по нагрузке.

Пермишены Django легко превратить в кашу из if-ов по всему коду. Разбираем, где проверять права, как не путать модельные пермишены с объектными и когда встроенного механизма уже не хватает.

Один и тот же аплоад в Django можно реализовать четырьмя способами — от простого FileField до отдачи через presigned URL. У каждого своя цена: память, время воркера, счёт за трафик.

Celery beat молча дублировал списание остатка пакета при двух воркерах, а cron на сервере переживал деплой, но не переживал масштабирование. Разбираем, как устроен планировщик на практике и где он ломается.

Отправка письма в обработчике запроса тормозит ответ на секунды. Разбираем, чем выносить работу в фон: Celery, RQ, django-q2 и когда хватит обычного управляющего процесса.

Кеш страниц в Django ускоряет отдачу в разы, но легко раздаёт чужие корзины и залогинивает не тех. Чек-лист того, что проверить до включения per-view и per-site кеша.

Сигналы удобны, пока их два. На пятом вы уже не понимаете, почему при сохранении заказа улетело письмо и обнулился счётчик. Разбираем, где сигналы уместны, а где ломают проект.

Кастомный менеджер ломает миграции, теряет фильтры в related-запросах и портит админку. Разбираем четыре ошибки, из-за которых менеджеры ведут себя не так, как задумано.

Платёжный провайдер повторил доставку вебхука трижды — и в базе появились три начисления вместо одного. Разбираем, как принимать вебхуки в Django так, чтобы дубликаты не ломали данные.

Три способа подключить платёжную систему к Django-проекту: готовый пакет, прямой вызов API провайдера и редирект на его форму. У каждого своя цена в безопасности, поддержке и контроле над UX.

Как принять оплату в Django без задвоенных заказов и потерянных платежей: идемпотентность, вебхуки, проверка подписи и статусная модель заказа.