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

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

     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.

     06.03.2026       Выпуск 638 (02.03.2026 - 08.03.2026)       Статьи

Making Django unique constraints case-insensitive (with no downtime)

Fix Django’s case-sensitive unique constraint pitfalls by cleaning duplicates, adding Lower() constraints, and safely migrating with PostgreSQL CONCURRENTLY to avoid downtime.

     27.02.2026       Выпуск 637 (23.02.2026 - 01.03.2026)       Статьи

The *1000 most popular* Django packages

Based on GitHub stars and PyPI download numbers.

     23.02.2026       Выпуск 637 (23.02.2026 - 01.03.2026)       Статьи

Что нужно знать о Django миграциях, чтобы не превратить в тыкву свой продакшен во время обновлений

Если вы разработчик и выбрали для своего проекта Django Framework, но не делали большие миграции на своем проекте, эти советы вам точно пригодятся.

     11.02.2026       Выпуск 635 (09.02.2026 - 15.02.2026)       Статьи

Sorting Strategies for Optional Fields in Django

How to control NULL value placement when sorting Django QuerySets using F() expressions.

     06.02.2026       Выпуск 634 (02.02.2026 - 08.02.2026)       Статьи

Django (anti)patterns

A website and repo with 39 common antipatterns, listing them as well as suggested changes. Worth a look!

     06.02.2026       Выпуск 634 (02.02.2026 - 08.02.2026)       Статьи

Why using [n] on a Django QuerySet can be unsafe?

Indexing a QuerySet can return nondeterministic rows because slicing does not add ordering, unlike first, which orders by primary key.

     30.01.2026       Выпуск 633 (26.01.2026 - 01.02.2026)       Статьи