⚡️ django-orjson ускоряет работу Django с JSON
Adam Johnson выпустил библиотеку
В основе лежит написанный на Rust
- сериализация до 10 раз быстрее;
- десериализация примерно в 2 раза быстрее.
Поддерживаются:
-
-
- сериализаторы, сессии и signing;
- компоненты Django REST Framework.
Пакет протестирован на поддерживаемых версиях Python и Django, заявлено 100% покрытие ветвей.
Также обсуждается подключаемый JSON-бэкенд для самого Django. Тогда стандартный
https://adamj.eu/tech/2026/07/15/introducing-django-orjson/
Adam Johnson выпустил библиотеку
django-orjson с готовыми заменами стандартных JSON-компонентов Django и Django REST Framework.В основе лежит написанный на Rust
orjson:- сериализация до 10 раз быстрее;
- десериализация примерно в 2 раза быстрее.
Поддерживаются:
-
JsonResponse и тестовый клиент;-
json_script;- сериализаторы, сессии и signing;
- компоненты Django REST Framework.
Пакет протестирован на поддерживаемых версиях Python и Django, заявлено 100% покрытие ветвей.
Также обсуждается подключаемый JSON-бэкенд для самого Django. Тогда стандартный
json можно будет заменить на orjson централизованно, без изменения импортов по всему проекту.https://adamj.eu/tech/2026/07/15/introducing-django-orjson/
🚀 Django 6.1 вышел: меньше магии, больше контроля
Новая версия Django приносит улучшения для production-приложений и работы с базой данных.
Главное новшество — новый подход к загрузке данных моделей.
Теперь можно контролировать, когда Django делает дополнительные запросы:
Это помогает бороться с проблемой N+1 запросов и лучше контролировать нагрузку на БД.
Новые режимы:
-
-
-
Также в Django 6.1:
- поддержка Python 3.12, 3.13 и 3.14;
- PostgreSQL 15+;
- MySQL 8.4+;
- MariaDB 10.11+;
- улучшения cache и внутренних механизмов.
Главная идея релиза:
Django всё меньше скрывает стоимость операций и даёт разработчикам больше контроля над тем, что происходит под капотом.
Подробнее:
https://www.djangoproject.com/weblog/2026/aug/05/django-61-released/
Новая версия Django приносит улучшения для production-приложений и работы с базой данных.
Главное новшество — новый подход к загрузке данных моделей.
Теперь можно контролировать, когда Django делает дополнительные запросы:
from django.db import models
books = Book.objects.fetch_mode(
models.FETCH_PEERS
)
Это помогает бороться с проблемой N+1 запросов и лучше контролировать нагрузку на БД.
Новые режимы:
-
FETCH_ONE — загружать данные только для текущего объекта;-
FETCH_PEERS — догружать данные сразу для группы объектов;-
RAISE — запрещать неожиданные запросы и ловить проблемы заранее.Также в Django 6.1:
- поддержка Python 3.12, 3.13 и 3.14;
- PostgreSQL 15+;
- MySQL 8.4+;
- MariaDB 10.11+;
- улучшения cache и внутренних механизмов.
Главная идея релиза:
Django всё меньше скрывает стоимость операций и даёт разработчикам больше контроля над тем, что происходит под капотом.
Подробнее:
https://www.djangoproject.com/weblog/2026/aug/05/django-61-released/
🐍 Django-разработчикам: `DEBUG=True` в проде опаснее, чем кажется.
Это не просто красивые страницы ошибок. При включённом DEBUG приложение может раскрывать stack trace, настройки, пути файлов, middleware, URL-паттерны и другие детали окружения.
Главная рекомендация - fail closed:
То есть по умолчанию DEBUG всегда выключен, а включается только локально.
Даже staging, QA и preview-среды, доступные из интернета, лучше запускать с
Отдельная ловушка - переменные окружения:
Здесь
Лучше явно парсить boolean или использовать
Мелкая настройка, которая однажды может спасти production от очень неприятной утечки.
https://lincolnloop.com/blog/setting-djangos-debug-safely/
#Python #Django #Backend #Security #DevOps
Это не просто красивые страницы ошибок. При включённом DEBUG приложение может раскрывать stack trace, настройки, пути файлов, middleware, URL-паттерны и другие детали окружения.
Главная рекомендация - fail closed:
DEBUG = False
То есть по умолчанию DEBUG всегда выключен, а включается только локально.
Даже staging, QA и preview-среды, доступные из интернета, лучше запускать с
DEBUG=False.Отдельная ловушка - переменные окружения:
DEBUG = os.environ.get("DEBUG", "False") != "False"
Здесь
DEBUG=false или DEBUG=0 могут неожиданно превратиться в True.Лучше явно парсить boolean или использовать
django-environ.Мелкая настройка, которая однажды может спасти production от очень неприятной утечки.
https://lincolnloop.com/blog/setting-djangos-debug-safely/
#Python #Django #Backend #Security #DevOps
Нечёткий поиск в Django + PostgreSQL можно сделать намного умнее обычного
В Caktus Group разобрали fuzzy string matching средствами самого PostgreSQL - без отдельного Elasticsearch.
Идея проста: вместо точного совпадения искать строки, похожие друг на друга.
Для этого в PostgreSQL можно использовать:
-
- trigram similarity
- Django
- пороги похожести
- GIN/GiST индексы для ускорения поиска
Например, пользователь вводит имя с опечаткой, переставляет буквы или пишет только часть слова - а приложение всё равно находит нужную запись.
Особенно полезно для поиска по именам, адресам, названиям компаний и любым пользовательским данным, где идеального ввода ждать не стоит.
https://www.caktusgroup.com/blog/2026/08/21/fuzzy-string-matching-django-postgresql/
icontains.В Caktus Group разобрали fuzzy string matching средствами самого PostgreSQL - без отдельного Elasticsearch.
Идея проста: вместо точного совпадения искать строки, похожие друг на друга.
Для этого в PostgreSQL можно использовать:
-
pg_trgm- trigram similarity
- Django
TrigramSimilarity- пороги похожести
- GIN/GiST индексы для ускорения поиска
Например, пользователь вводит имя с опечаткой, переставляет буквы или пишет только часть слова - а приложение всё равно находит нужную запись.
Особенно полезно для поиска по именам, адресам, названиям компаний и любым пользовательским данным, где идеального ввода ждать не стоит.
https://www.caktusgroup.com/blog/2026/08/21/fuzzy-string-matching-django-postgresql/
Caktusgroup
Fuzzy String Matching in Django and PostgreSQL | Caktus Group
The bare minimum of Django and PostgreSQL building blocks for fuzzy name search: Soundex, Daitch-Mokotoff, Levenshtein, and trigrams, with a simple example of each and the index to add.
🔥 Хак в Django:
Оказывается,
Идея:
А затем добавить её прямо в модель:
После этого makemigrations сам подхватит изменение, а migrate выполнит нужный SQL.
Почему это работает:
Index уже умеет генерировать SQL через create_sql() и remove_sql().
Так можно описывать не только индексы, но и:
Автор использовал этот приём для PostgreSQL Anonymizer, чтобы правила анонимизации жили рядом с моделью и автоматически попадали в миграции.
Подход довольно hacky, но как способ расширить механизм миграций Django — очень интересный.
https://www.better-simple.com/django/2026/09/02/nifty-feature-use-index-for-custom-migrations/
Meta.indexes можно использовать для собственных миграцийОказывается,
models.Index в Django можно превратить почти в универсальную migration-операцию.Идея:
class CustomMigrationOperation(models.Index):
def create_sql(self, model, schema_editor, **kwargs):
...
def remove_sql(self, model, schema_editor, **kwargs):
...
А затем добавить её прямо в модель:
class Meta:
indexes = [CustomMigrationOperation()]
После этого makemigrations сам подхватит изменение, а migrate выполнит нужный SQL.
Почему это работает:
Index уже умеет генерировать SQL через create_sql() и remove_sql().
Так можно описывать не только индексы, но и:
triggers
table comments
security labels
другие schema-level настройки
Автор использовал этот приём для PostgreSQL Anonymizer, чтобы правила анонимизации жили рядом с моделью и автоматически попадали в миграции.
Подход довольно hacky, но как способ расширить механизм миграций Django — очень интересный.
https://www.better-simple.com/django/2026/09/02/nifty-feature-use-index-for-custom-migrations/
🔥 Django
Пример:
Особенно полезно для динамических фильтров:
Но есть ещё более важный момент.
При фильтрации через related models два отдельных .filter() могут привести к двум JOIN и неожиданно изменить смысл запроса.
Это уже может искать одну запись по имени, а другую - по количеству treats.
Если собрать условия в одном .filter() или через Q(), Django использует один JOIN и проверяет условия на одной и той же связанной записи.
Очень полезный приём для сложных QuerySet, динамического поиска и composable business filters.
https://www.better-simple.com/django/2026/09/09/nifty-feature-q-objects/
Q() objects — один из самых полезных инструментов ORM, который многие используют слишком редкоQ() позволяет собирать сложные условия для WHERE, комбинируя их через AND, OR и NOT.Пример:
Pet.objects.filter(
Q(last_given_treats__isnull=True)
| Q(last_given_treats__lte=timezone.now() - timedelta(days=1)),
treats_needed__gt=F("treats_given"),
)
Особенно полезно для динамических фильтров:
q = Q()
for term in search_term.split():
q |= Q(name__icontains=term)
Pet.objects.filter(q)
Но есть ещё более важный момент.
При фильтрации через related models два отдельных .filter() могут привести к двум JOIN и неожиданно изменить смысл запроса.
Species.objects.filter(
pets__name__icontains="meowy"
).filter(
pets__treats_given=0
)
Это уже может искать одну запись по имени, а другую - по количеству treats.
Если собрать условия в одном .filter() или через Q(), Django использует один JOIN и проверяет условия на одной и той же связанной записи.
Очень полезный приём для сложных QuerySet, динамического поиска и composable business filters.
https://www.better-simple.com/django/2026/09/09/nifty-feature-q-objects/
Вопросы на собеседовании Python Senior: 100 вопросов с ответами (2026)
Вопросы на собеседовании Python Senior с ответами: 100 вопросов и примеры кода — CPython, GIL, asyncio, метаклассы, типизация, производительность, Python 3.14.
https://uproger.com/voprosy-na-sobesedovanii-python-senior/
Вопросы на собеседовании Python Senior с ответами: 100 вопросов и примеры кода — CPython, GIL, asyncio, метаклассы, типизация, производительность, Python 3.14.
https://uproger.com/voprosy-na-sobesedovanii-python-senior/
Forwarded from Python/ django
🐍 Какая зависимость держит ваш Django на старой версии?
django-upgrade-report читает зависимости проекта, проверяет заявленную совместимость на PyPI и составляет план обновления:
- Какие пакеты блокируют переход.
- Что можно обновить заранее.
- Что нужно обновлять одновременно с Django.
- Где потребуется ручная проверка.
Поддерживает lock-файлы uv, Poetry, PDM, Pipenv и
Запуск из папки проекта:
Отчёт можно сохранить в HTML, Markdown или JSON и подключить к CI. Совместимость оценивается по метаданным пакетов, поэтому тесты проекта всё равно нужны.
https://github.com/derblub/django-upgrade-report
django-upgrade-report читает зависимости проекта, проверяет заявленную совместимость на PyPI и составляет план обновления:
- Какие пакеты блокируют переход.
- Что можно обновить заранее.
- Что нужно обновлять одновременно с Django.
- Где потребуется ручная проверка.
Поддерживает lock-файлы uv, Poetry, PDM, Pipenv и
requirements.txt. Подбирает минимальную подходящую версию пакета, чтобы сократить масштаб изменений.Запуск из папки проекта:
uvx django-upgrade-report
Отчёт можно сохранить в HTML, Markdown или JSON и подключить к CI. Совместимость оценивается по метаданным пакетов, поэтому тесты проекта всё равно нужны.
https://github.com/derblub/django-upgrade-report
django-upgrade-report. Показывает, какие зависимости блокируют апгрейд Django и в каком порядке их обновлять.
https://github.com/derblub/django-upgrade-report
https://github.com/derblub/django-upgrade-report
GitHub
GitHub - derblub/django-upgrade-report: Which of your dependencies block a Django upgrade, and in which order to upgrade them.
Which of your dependencies block a Django upgrade, and in which order to upgrade them. - derblub/django-upgrade-report
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку
Окружение решает больше, чем кажется.
Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: https://t.me/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_ci
Java: t.me/javatg
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: t.me/fizmat
Kubernetes: t.me/kubernetc
GameDev: https://t.me/gamedev
Haskell: t.me/haskell_tg
Собеседования и карьера:
DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview
Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: https://t.me/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.
Окружение решает больше, чем кажется.
Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.
AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: https://t.me/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_ci
Java: t.me/javatg
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: t.me/fizmat
Kubernetes: t.me/kubernetc
GameDev: https://t.me/gamedev
Haskell: t.me/haskell_tg
Собеседования и карьера:
DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview
Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy
Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy
Полезное сверху:
ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: https://t.me/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy
Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg
Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.
django-upgrade-report: CLI, который сам скажет, какие зависимости мешают обновить Django и в каком порядке их менять
Обновление Django обычно упирается не в сам фреймворк, а в десяток сторонних пакетов, которые ещё не поддерживают новую версию. Этот инструмент отвечает на два вопроса сразу: что блокирует апгрейд и что обновлять первым.
Работает так. Читает uv.lock, poetry.lock, pdm.lock, Pipfile.lock, requirements*.txt, pyproject.toml или установленное окружение, включая транзитивные зависимости. Затем спрашивает у PyPI, что каждый пакет заявляет о совместимости: классификаторы Framework :: Django и требования к версии Django. Результат раскладывается по статусам: Blocked, Upgrade first, Upgrade together with Django, Check manually и Ready.
Из полезного. Для каждого пакета называется самая старая версия с поддержкой целевого Django, чтобы шаги были маленькими. Если до цели далеко, строит многошаговый путь через LTS или через каждую версию. Проверяет, не потребуется ли более новый Python, умеет работать с монорепозиториями, Wagtail и django CMS. Может печатать команды обновления и конфиги для Renovate и Dependabot, показывает неиспользуемые прямые зависимости и фичи, удалённые из Django, которые ваш код ещё использует. Есть интерактивный TUI, GitHub Action, pre-commit хук и примеры для GitLab CI.
Запуск без установки: uvx django-upgrade-report --target 6.1. Форматы вывода: текст, Markdown, JSON и самодостаточный HTML. Для CI есть флаг --fail-on blocked, который возвращает ненулевой код выхода.
Код остаётся локально, на PyPI уходят только имена и версии пакетов. Нужен Python 3.10 или новее, сам Django ставить не требуется.
Оговорка: отчёт строится по метаданным, которые заявили мейнтейнеры, и не заменяет прогон тестов. Автор советует использовать его в паре с django-upgrade, который переписывает сам код под новые версии. Лицензия MIT.
Репозиторий: https://github.com/derblub/django-upgrade-report
Источник: https://github.com/derblub/django-upgrade-report
https://t.me/ai_machinelearning_big_data
Обновление Django обычно упирается не в сам фреймворк, а в десяток сторонних пакетов, которые ещё не поддерживают новую версию. Этот инструмент отвечает на два вопроса сразу: что блокирует апгрейд и что обновлять первым.
Работает так. Читает uv.lock, poetry.lock, pdm.lock, Pipfile.lock, requirements*.txt, pyproject.toml или установленное окружение, включая транзитивные зависимости. Затем спрашивает у PyPI, что каждый пакет заявляет о совместимости: классификаторы Framework :: Django и требования к версии Django. Результат раскладывается по статусам: Blocked, Upgrade first, Upgrade together with Django, Check manually и Ready.
Из полезного. Для каждого пакета называется самая старая версия с поддержкой целевого Django, чтобы шаги были маленькими. Если до цели далеко, строит многошаговый путь через LTS или через каждую версию. Проверяет, не потребуется ли более новый Python, умеет работать с монорепозиториями, Wagtail и django CMS. Может печатать команды обновления и конфиги для Renovate и Dependabot, показывает неиспользуемые прямые зависимости и фичи, удалённые из Django, которые ваш код ещё использует. Есть интерактивный TUI, GitHub Action, pre-commit хук и примеры для GitLab CI.
Запуск без установки: uvx django-upgrade-report --target 6.1. Форматы вывода: текст, Markdown, JSON и самодостаточный HTML. Для CI есть флаг --fail-on blocked, который возвращает ненулевой код выхода.
Код остаётся локально, на PyPI уходят только имена и версии пакетов. Нужен Python 3.10 или новее, сам Django ставить не требуется.
Оговорка: отчёт строится по метаданным, которые заявили мейнтейнеры, и не заменяет прогон тестов. Автор советует использовать его в паре с django-upgrade, который переписывает сам код под новые версии. Лицензия MIT.
Репозиторий: https://github.com/derblub/django-upgrade-report
Источник: https://github.com/derblub/django-upgrade-report
https://t.me/ai_machinelearning_big_data
GitHub
GitHub - derblub/django-upgrade-report: Which of your dependencies block a Django upgrade, and in which order to upgrade them.
Which of your dependencies block a Django upgrade, and in which order to upgrade them. - derblub/django-upgrade-report