IT-новости про Python, которые стоит знать

Собрали в одном месте самые важные ссылки
и сделали Тренажер IT-инцидентов для DevOps/SRE

     29.08.2026       Выпуск 663 (24.08.2026 - 30.08.2026)       Статьи
     27.08.2026       Выпуск 663 (24.08.2026 - 30.08.2026)       Статьи

Тестирование крупного Django-монолита: от хаоса с ID к стабильным прогонам в pytest

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

     27.08.2026       Выпуск 663 (24.08.2026 - 30.08.2026)       Статьи

Modern Django Deployments in 2026

A written guide to my talk on deploying Django and why 90% of it is the same.

     08.08.2026       Выпуск 660 (03.08.2026 - 09.08.2026)       Статьи
     29.07.2026       Выпуск 659 (27.07.2026 - 02.08.2026)       Статьи

Как мы построили IAM для Telegram поверх Telethon и автоматизировали управление сотней корпоративных Telegram-чатов

В этой статье расскажу, как мы построили отдельный модуль управления корпоративными чатами и каналами на Django, PostgreSQL и Telethon. Без привязки к нашей внутренней инфраструктуре — только архитектура, технические решения и несколько выводов, которые могут пригодиться при решении похожей задачи.

     28.07.2026       Выпуск 659 (27.07.2026 - 02.08.2026)       Статьи

Django ORM ломается не там, где вы смотрели: шесть ошибок

Django ORM умеет долго скрывать проблемы: лишние запросы, гонки при save(), затянувшиеся транзакции и выборки, которые незаметно съедают память. В статье разберём шесть типичных ошибок, которые редко проявляются на тестовых данных, зато быстро становятся заметны под нагрузкой.

     20.07.2026       Выпуск 658 (20.07.2026 - 26.07.2026)       Статьи

Best Django Redis configuration for speed and size

`lzma` compresses the most and `zlib` is about as fast as `zstd` in `django_redis` as compressor.

     01.07.2026       Выпуск 655 (29.06.2026 - 05.07.2026)       Статьи

Интеграция CGM в Django: Libre, Medtrum, Home Assistant и собственное хранилище данных

Современный диабетик использует сразу несколько устройств и сервисов. Сенсор непрерывного мониторинга глюкозы, приложение производителя, иногда инсулиновую помпу, иногда обычные шприц-ручки. Каждый производитель строит собственную экосистему, и объединять их между собой никто не собирается.Мне хотелось получить единую систему, которая автоматически собирает показатели сахара, хранит историю и предоставляет данные уже моему приложению.

     27.06.2026       Выпуск 654 (22.06.2026 - 28.06.2026)       Статьи

Django-style фильтры поверх SQLAlchemy: зачем я написал python пакет sqlalchemy-query-manager

TL;DR: я сделал sqlalchemy-query-manager — небольшой слой поверх SQLAlchemy для типовых backend-запросов. Он не заменяет SQLAlchemy, а добавляет более компактную запись для частых операций: фильтры в стиле number__gte=100, условия через Q, фильтрацию по связанным моделям, eager loading, CRUD helpers, агрегаты и просмотр итогового SQL. Идея в том, чтобы оставить SQLAlchemy в основе, но убрать повторяющийся код там, где запросы становятся слишком большими.

     20.06.2026       Выпуск 653 (15.06.2026 - 21.06.2026)       Статьи

Django-согласия и cookies под 152-ФЗ: версии документов, аудит и экспорт вместо одного чекбокса

Согласие на обработку персональных данных в Django-проекте часто начинается с одного BooleanField. Но затем оказывается, что недостаточно помнить только факт нажатия на чекбокс: пользователь мог видеть другую редакцию документа, отозвать согласие, выбрать лишь часть категорий файлов cookie, а администратору может понадобиться журнал действий и выгрузка в CSV. Я сделал для этого два полностью независимых Django-пакета с открытым исходным кодом:

     12.06.2026       Выпуск 652 (08.06.2026 - 14.06.2026)       Статьи

Асинхронный django: новые начинания

Раньше я уже писал о своих идеях (1 и 2) о том, как сделать django асинхронным. Они основывались, вслед за sqlalchemy, на использовании гринлетов. Несмотря на то, что proof-of-concept был успешно получен, а трудностей - встречено меньше, чем ожидалось, я всё-таки отказался от этого подхода: во-первых, он уже применяется в sqlalchemy. Во-вторых, это ведёт к усложнению, и растёт так называемая test matrix - потому что поддерживается как синхронный случай, так и асинхронный. А simple, как мы знаем, is better than complex.

     11.06.2026       Выпуск 652 (08.06.2026 - 14.06.2026)       Статьи

Минус 500 MB: оптимизируем Docker-образ Django-приложения

Когда Docker-образ backend-приложения начинает весить 1,5 GB, это уже хороший повод хотя бы посмотреть, что вообще лежит внутри. Пока все работает, мало кто задумывается, сколько мусора, dev-зависимостей и ненужных файлов уезжает в production вместе с приложением. Но на самом деле от «лишнего веса» нужно избавляться, потому что каждый лишний мегабайт — это более долгие сборки и дополнительные сложности.  

     01.06.2026       Выпуск 651 (01.06.2026 - 07.06.2026)       Статьи
     16.05.2026       Выпуск 648 (11.05.2026 - 17.05.2026)       Статьи

manage.py migrate в пятницу в 17:30 на проде с 3K RPS и таблицей 200М строк

 Это третья часть мини-серии о Django-миграциях. В первой части мы готовились к миграциям и разбирались с конфликтами, во второй чинили типичные подводные камни. Если их не читали, то рекомендую начать именно с них, а затем вернуться сюда.В этом же материале поговорим о самом интересном: что происходит, когда python manage.py migrate запускается в 17:30 в пятницу на проде, под 3k RPS и таблицей в 200 миллионов строк. Расскажу какие блокировки в PostgreSQL берёт каждая операция Django, что внутри atomic = False, как пишется правильный паттерн expand-migrate-contract, зачемнужны AddIndexConcurrently, AddConstraintNotValid, SeparateDatabaseAndState и как обновлять данные на больших таблицах.

     01.04.2026       Выпуск 642 (30.03.2026 - 05.04.2026)       Статьи

Фабрики в тестировании (Python, Django, pytest, factory_boy)

Здесь мы рассматриваем фабрики в тестировании. На очень элементарных примерах, с использованием языка python и инструментов Django, pytest, factory_boy.

     01.04.2026       Выпуск 642 (30.03.2026 - 05.04.2026)       Статьи

Gotchas With SQLite in Production

What you need to know before putting a Django project that uses SQLite in production. This is part 5 of a series that includes information on write-ahead logging, locking errors, performance, and more.

     31.03.2026       Выпуск 642 (30.03.2026 - 05.04.2026)       Статьи

Мы сделали лучший REST фреймворк для Django

Сегодня я расскажу, как мы сделали самый быстрый и самый семантически корректный фреймворк для создания апишек на Джанго. Поговорим про конкурентов, покажу очень крутые интеграции, поделюсь своей философией и правилами, которые использовались для создания фреймоврка, ну накину на вентилятор для интереса.

     18.03.2026       Выпуск 640 (16.03.2026 - 22.03.2026)       Статьи

Avoiding empty strings in non-nullable Django string-based model fields

Django silently converts None values in non-nullable string fields into empty strings, but a simple CheckConstraint can enforce truly required values and prevent empty data from slipping into your database.

     13.03.2026       Выпуск 639 (09.03.2026 - 15.03.2026)       Статьи

Avoiding empty strings in non-nullable Django string-based model fields

Django silently converts None values in non-nullable string fields into empty strings, but a simple CheckConstraint can enforce truly required values and prevent empty data from slipping into your database.