Мар 10, 2026

Django 5.2 LTS в продукция: трите промени, които имаха най голямо значение

Django 5.2 LTS в продукция: трите промени, които имаха най голямо значение

Django 5.2 LTS излезе миналата пролет и ние прекарахме първите шест месеца в изчакване: качване на staging, наблюдение докато LTS екосистемата се догонва, след това миграция в продукция. Този прозорец се затвори през януари и сега имаме три месеца реален товар зад гърба си. Три промени заслужават да бъдат споменати; останалото се държа точно както беше обещано в release notes.

Съставни първични ключове

Нашият фискален сервиз пази леджър с ключ (site_id, fiscal_day, sequence). Преди 5.2 имитирахме това с unique together и auto integer сурогат, което работеше, но създаваше два индекса за поддръжка и постоянен източник на объркване в ORM заявките. Истинските съставни първични ключове ни позволиха да махнем сурогата, да смалим таблицата с 12% и което имаше значение при ревю да опишем схемата в модела точно така, както бизнесът я описва на хартия.

Async ORM без скритите капани

Вече ползвахме async на няколко места. Това, което се промени в 5.2, е че моделите около транзакциите и управлението на connection ите най накрая са предсказуеми. Нашият ingestion worker този, който консумира MQTT събития от станциите и записва транзакции премина на async от край до край и устоя на около 4.2× по висок throughput на същия pod, с по ниска tail latency, не по висока. Продължаваме да пишем sync код по подразбиране; async вече е инструмент, който избираме съзнателно, а не риск.

Рендиране на форми през темплейти

Малка промяна с големи последствия. Формите се рендират през template engine в 5.2 по подразбиране, което означава, че нашите персонализации спряха да живеят в subclass ове на widget и и се преместиха в темплейти, които front end екипът може да чете. Три седмици натрупани тикети с widget hack ове се изпариха за един следобед.

Какво не използвахме

Пропуснахме засега промените в поведението на QuerySet.none() при празен списък семантиката е коректна, но нашият съществуващ код разчиташе на старата форма в две отчетни заявки, а пренаписването им не си струваше в прозореца за upgrade. Задача за лятото.

Тагове: Python, Django

оставете коментар