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

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

Экспорт данных в Excel кажется задачей на десять минут, но на большом отчёте выедает память и вешает воркер. Разбираем стриминг, форматы xlsx против csv и фоновую генерацию.

Отчёт на 40 страниц собирался 12 секунд и валил воркеры Gunicorn по таймауту. Разбираем, почему синхронная генерация PDF ломает Django-приложение и как её вынести из цикла запроса.

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

Перевод интерфейса, URL и контента из базы решаются разными инструментами. Разбираем, что делать штатной i18n, а где ставить django-parler или django-modeltranslation, и чем платишь за каждый выбор.

Флаг is_deleted кажется безобидным, пока не всплывают дубли в уникальных полях, утечки в related-запросах и объекты, которые «не удалились». Разбираем, что учесть при мягком удалении в Django 5.x.

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

Кнопка «Скачать CSV» на 500 000 строк кладёт воркер в таймаут. Разбираем, как отдавать выгрузки в Django без OOM: стриминг, генераторы, values() и вынос тяжёлых экспортов в очередь.

Отправка письма прямо во вьюхе тормозит запрос, дубли уходят при ретраях, а на 10 000 адресатов почта падает по таймауту. Разбираем частые ошибки в системе уведомлений на Django и что с ними делать.

Скрипт импорта каталога на Django ORM работал 40 минут и падал по таймауту. Разбираем, где именно теряется время и как переписать импорт, чтобы он укладывался в минуты.

Когда icontains перестаёт справляться, в Django есть встроенный полнотекстовый поиск на движке PostgreSQL. Разбираем, что настроить, чтобы он искал по релевантности и не проседал на больших таблицах.

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