django_pythonl | Unsorted

Telegram-канал django_pythonl - Django Python

7098

Django Вопросы @haarrp all questions to @haarrp @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - ml 📚 @pythonlbooks -📚books @hr_itwork-работа

Subscribe to a channel

Django Python

Одна правка документа перегрузила PostgreSQL. Как в Django переделали кеш

Команда Джонни Метца хранила в Redis готовый список документов для каждого пользователя. Когда крупный клиент изменил одну общую запись, обработчик сбросил кеш тысяч пользователей. Их следующие запросы почти одновременно пошли в PostgreSQL, и API несколько минут работал медленнее.

Кеш разделили. Для пользователя хранят только ID доступных ему документов. Каждый документ лежит в Redis в одном экземпляре, а Django забирает нужные записи пачкой через get_many. Поле can_edit вычисляют при сборке ответа с учётом прав конкретного пользователя. Теперь при переименовании документа достаточно удалить один ключ doc:<id>.

TTL увеличили до семи дней. Ключи удаляют после коммита через transaction.on_commit: если удалить ключ раньше, параллельный запрос может снова положить в кеш старые данные. При промахе читают из primary, чтобы в кеш не попала устаревшая версия с отстающей реплики.

За три месяца внедрения трафик вырос примерно на 40%, средняя задержка упала примерно на 40%, а число запросов к БД в секунду сократилось вдвое. На обычном пике API обслуживает около 1 100 запросов в секунду, доля попаданий в кеш составляет 97%.

https://johnnymetz.com/posts/caching-at-scale-in-django/

Читать полностью…

Django Python

Django 6.1: загрузка связанных данных по требованию, каскадное удаление силами БД и новая настройка почты.

Релиз вышел 5 августа. Три основных изменения:

1. Новые режимы загрузки полей

FETCH_PEERS при обращении к незагруженному полю получает данные сразу для объектов из того же QuerySet. Это помогает бороться с N+1:


from django.db import models

books = Book.objects.fetch_mode(models.FETCH_PEERS)

for book in books:
print(book.author.name)


В этом примере Django выполняет два запроса: за книгами и за их авторами.

Режим `FETCH_RAISE` вместо неявного запроса выбрасывает исключение – полезно для обнаружения неожиданных обращений к БД.

2. Удаление на уровне базы

Для ForeignKey.on_delete появились `DB_CASCADE`, `DB_SET_NULL` и `DB_SET_DEFAULT`. Логику выполняет сама БД через SQL ON DELETE.

Нюанс: `DB_CASCADE` не вызывает сигналы `pre_delete` и `post_delete`.

3. Несколько почтовых бэкендов

Настройка `MAILERS` позволяет описывать разные подключения словарём, а при отправке выбирать нужное через using.

Перед обновлением проверьте версии БД: нужны PostgreSQL 15+, MySQL 8.4+, MariaDB 10.11+ или SQLite 3.37+.

https://www.djangoproject.com/weblog/2026/aug/05/django-61-released/

Читать полностью…

Django Python

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

Читать полностью…

Django Python

django-upgrade-report. Показывает, какие зависимости блокируют апгрейд Django и в каком порядке их обновлять.
https://github.com/derblub/django-upgrade-report

Читать полностью…

Django Python

Вопросы на собеседовании Python Senior: 100 вопросов с ответами (2026)

Вопросы на собеседовании Python Senior с ответами: 100 вопросов и примеры кода — CPython, GIL, asyncio, метаклассы, типизация, производительность, Python 3.14.


https://uproger.com/voprosy-na-sobesedovanii-python-senior/

Читать полностью…

Django Python

🔥 Хак в Django: 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 Python

🐍 Django-разработчикам: `DEBUG=True` в проде опаснее, чем кажется.

Это не просто красивые страницы ошибок. При включённом 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 Python

⚡️ django-orjson ускоряет работу Django с JSON

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 Python

Вышел Django 6.0.

Релиз получился не про косметику, а про вещи, которые давно просились в core.

Главное - встроенная поддержка Content Security Policy.

Теперь CSP можно настраивать прямо в Django через middleware, context processor и настройки SECURE_CSP / SECURE_CSP_REPORT_ONLY. Это упрощает защиту от XSS и content injection без отдельного пакета.

Второе важное изменение - template partials.

В шаблонах появились {% partialdef %} и {% partial %}. Можно описывать небольшие переиспользуемые фрагменты прямо внутри template-файла, а не дробить всё на отдельные include.

Третье - встроенный Tasks framework.

Django теперь умеет описывать и ставить фоновые задачи в очередь. Но важно: воркер в комплект не входит. Запуск задач всё равно остаётся за внешним процессом или инфраструктурой.

Ещё из полезного:

• поддержка Python 3.12, 3.13 и 3.14

• современный Python email API

• AsyncPaginator

• StringAgg теперь не только для PostgreSQL

• forloop.length в шаблонах

• DEFAULT_AUTO_FIELD теперь по умолчанию BigAutoField

Перед обновлением стоит внимательно пройтись по breaking changes: Python ниже 3.12 больше не поддерживается, MariaDB 10.5 тоже выпала, а часть email API и ORM-кастомизаций может потребовать правок.

Документация:
https://docs.djangoproject.com/en/6.0/releases/6.0/

Читать полностью…

Django Python

🐍 Python Roadmap 2026: наконец-то полноценная актуальная карта изучения Python, а не список ссылок «разберись сам»

На GitHub выложили большой русскоязычный роадмап по Python на 2026 год - от первых скриптов до уровня Middle+/Senior.

Маршрут собран под современный Python:

- Python 3.13+
- free-threaded mode без GIL
- JIT
- uv вместо боли с pip/venv/poetry
- ruff, pyright, pytest, hypothesis
- async-first подход
- типизация
- CPython внутри
- web, базы, ML/AI, DevOps и архитектура

В роадмапе есть нормальная последовательность: сначала окружение и база, потом идиомы, ООП, типы, стандартная библиотека, асинхронность, тестирование, внутренности CPython, web, базы данных, AI-направление, продакшн и архитектура.

Отдельный плюс - практический формат. На каждом этапе есть задачи, чеклисты, примеры кода и бесплатные ресурсы. То есть это не мотивационная простыня, а маршрут, по которому реально можно идти несколько месяцев и видеть прогресс.

Для новичков - понятный путь без хаоса.
Для джунов - способ закрыть дыры.
Для тех, кто уже пишет на Python - хороший чеклист, чтобы понять, где ты всё ещё плаваешь.

Python в 2026 году - это tooling, типы, async, инфраструктура, AI и продакшн-дисциплина. И этот роадмап как раз про такой Python.

https://github.com/justxor/pythonroamap2026

Читать полностью…

Django Python

⚡️ Вы слышали про Rust. Знаете, что он быстрый, безопасный и что за ним будущее.

Осталось одно: сесть и выучить.

Этот курс со Stepik- кратчайший путь от «знаю что такое Rust» до «пишу на нём».

6 модулей, 50 уроков, 143 теста. Ownership, borrowing, traits, async, Tokio, Axum, макросы, WASM — всё разложено по полочкам и закреплено практикой.
Никакого видео на 40 минут ради одной мысли. Подробный текст, много кода, реальные задачи после каждого урока. На выходе — портфолио из 10+ проектов: от CLI-утилит до REST API с базой данных.

48 часов действует скидка 55 процентов: stepik.org/course/269250

Читать полностью…

Django Python

✔️ Лови полезный Django-совет, который спасает продакшен чаще, чем кажется.

Никогда не делай тяжёлую логику в Django views.

Новички часто пихают всё прямо во view:

- бизнес-логику
- валидацию
- расчёты
- работу с БД
- интеграции

В итоге получается "божественная функция" на 200 строк, которую невозможно тестировать и поддерживать.

Правильный подход — разделять слои:

- View — только принимает запрос и отдаёт ответ
- Services / use-cases — бизнес-логика
- Models — работа с данными
- Serializers / Forms — валидация

Плохо:


def create_order(request):
user = request.user
items = request.data['items']
total = 0
for item in items:
product = Product.objects.get(id=item['id'])
total += product.price * item['qty']
order = Order.objects.create(user=user, total=total)
...


Лучше:


# services/order_service.py
def create_order(user, items):
total = calculate_total(items)
return Order.objects.create(user=user, total=total)

# views.py
def create_order_view(request):
order = create_order(request.user, request.data['items'])
return Response({"id": order.id})


Почему это важно:

• проще тестировать

• код переиспользуется

• view не превращается в монстра

• легче менять логику, не трогая API

Django не заставляет делать так, но большие проекты без этого долго не живут.

Читать полностью…

Django Python

Идеальный старт для проекта Django: конфигурация окружения.

Сохрани себе идеальный шаблон virtual environment и основных настроек для каждого нового проекта Django. Это упростит процесс настройки окружения и позволит избежать распространенных ошибок.


# Создание виртуального окружения
python3 -m venv venv

# Активация виртуального окружения
source venv/bin/activate

# Установка основных зависимостей
pip install django djangorestframework psycopg2

# Создание файла requirements.txt
pip freeze > requirements.txt

# Инициализация нового проекта Django
django-admin startproject myproject
# Переход в директорию проекта
cd myproject

# Запуск сервера для проверки
python manage.py runserver

Читать полностью…

Django Python

🚀 AgentCPM-Explore - первый open-source агент на 4B, который реально тащит GAIA и сложные реальные задачи

OpenBMB выкатили AgentCPM-Explore - модель всего на 4B параметров, но по агентным метрикам она выглядит как зверь.

✅ SOTA среди 4B агент-моделей
По агентным бенчмаркам модель:
- обгоняет всех на своём масштабе
- превосходит часть 8B моделей
- и даже конкурирует с некоторыми 30B+ и closed-source LLM

🧠 Deep Research как у “исследователя”
Модель умеет:
- длинные цепочки рассуждений (long-horizon reasoning)
- 100+ ходов автономного диалога
- проверять себя через несколько источников (cross-validation)
- делать самокоррекцию как человек
- динамически менять стратегию и использовать инструменты

То есть это уже не “чатбот”, а мини-исследователь, который реально может вести задачу до конца.

🔓 Открыт не только модельный вес - открыт весь стек
И это самое жирное: OpenBMB выкладывают не “голую модель”, а весь pipeline агентности:

- AgentRL - асинхронный RL-фреймворк для обучения агентов
- AgentDock - безопасная песочница инструментов (tool sandbox)
- AgentToLeaP - платформа оценки tool-learning (в один клик)
- полный датапайплайн и воспроизводимые training workflows

Это полноценная open-source платформа для создания агентов, где можно реально учиться, экспериментировать и собирать своих автономных “ресёрчеров”.

Кто уже тестил GAIA на своих агентах ?

🤗 Hugging Face: https://huggingface.co/openbmb/AgentCPM-Explore
🔗 GitHub: https://github.com/OpenBMB/AgentCPM

Читать полностью…

Django Python

🖥 FastAPI для клиента: как должны выглядеть API-клиенты в Python

Python-сообщество отлично научилось делать API-серверы.
FastAPI / DRF дают идеальный опыт разработчика:
- типы
- валидация
- понятные эндпоинты
- документация по OpenAPI
- минимум рутины

Но есть проблема.

Серверы стали удобными и “правильными”, а вот клиентская сторона до сих пор часто выглядит как кустарщина.

Что часто встречается в проектах на базе python:
- везде раскиданы httpx.get/post
- URL собираются руками
- параметры и headers копируются по коду
- ответы парсятся вручную
- ошибки обрабатываются как попало
- нет нормальных типов и автодополнения

И именно тут часто появляется 80% проблем.
API может быть идеально спроектирован, но пользоваться им неудобно.

Да, можно сгенерировать кода клиента.
Но чаще всего генератор выдаёт огромный неудобный код:
- странные имена методов
- перегруженные классы
- нечитаемый boilerplate
- всё равно приходится писать обёртки руками

В итоге клиенты либо не генерируют вообще, либо генерируют и потом ненавидят.

API-клиенты должны быть сделаны как фреймворк.
Как FastAPI, только наоборот.


То есть ты описываешь клиент красиво и декларативно:
- функция описывает intent (что мы делаем)
- типы описывают контракт
- библиотека берёт на себя HTTP-рутину

Вместо кода “на коленке”
httpx.get("https://api.site.com/users/123")

Должно быть
get_user(123)

И дальше библиотека сама:
- соберёт URL
- подставит параметры
- сериализует запрос
- выполнит HTTP
- распарсит ответ
- кинет нормальную ошибку
- даст типы и автодополнение в IDE

Именно эту идею автор статье и продвигает (проект Clientele)
Сделать API-клиенты удобными, чистыми и типобезопасными
так же, как мы привыкли делать серверы

Проблема не в HTTP.
Проблема в том, что API-клиенты в Python до сих пор не стали “первоклассным кодом”.

А должны стать.

Подробности: paulwrites.software/articles/python-api-clients

Читать полностью…

Django Python

Django закрыл 6 уязвимостей безопасности. Среди них SSRF, утечка паролей и раскрытие пользовательских данных

3 ноября команда Django выпустила экстренные обновления безопасности для трёх веток фреймворка:

- Django 6.1.3
- Django 6.0.10
- Django 5.2.19

Всего исправлено 6 уязвимостей: одна средней и пять низкой степени серьёзности.

Что обнаружили:

1. SSRF через GeoJSON

Злоумышленник мог передать вредоносный URL в поле crs геометрии GeoJSON. GDAL обращался к внешнему ресурсу или читал локальные файлы от имени Django-процесса.

2. SSRF через SpatialReference

Строковые значения, переданные в SpatialReference и связанные GIS-методы, могли заставить GDAL обращаться к URL или читать файлы на сервере.

3. Утечка приватных данных через кеш

UpdateCacheMiddleware и cache_page() могли создавать одинаковые ключи кеша для запросов с отсутствующим и пустым HTTP-заголовком из Vary. В результате один пользователь мог получить закешированный ответ другого.

4. Раскрытие хешей паролей

В Django Admin пользователи с правом только на просмотр могли видеть полные хеши паролей при определённых конфигурациях пользовательских моделей.

5. Исчерпание памяти при загрузке файлов

MultiPartParser мог полностью буферизовать multipart-файлы с Content-Transfer-Encoding: base64, игнорируя ограничение FILE_UPLOAD_MAX_MEMORY_SIZE.

6. Log Injection

Некорректные значения геометрических полей записывались в логи без экранирования управляющих символов. Это позволяло подделывать записи и изменять отображение логов.

Что делать разработчикам?

Обновить Django до исправленной версии своей ветки. Для GIS-приложений также проверить версию GDAL: полноценная защита от проблемы с SpatialReference требует GDAL 3.9 или новее.

Особенно внимательно стоит проверить приложения, принимающие пользовательский GeoJSON, работающие с GIS-данными и использующие кеширование персонализированных ответов.

Исходный отчёт: https://www.djangoproject.com/weblog/2026/nov/03/security-releases/

Читать полностью…

Django Python

Хотите повлиять на Django 6.2? Команда ищет помощь с тестированием и ревью новых возможностей.

Django Steering Council опубликовал список изменений, которые хотелось бы подготовить к релизу.

Среди крупных:

- `CompositeField` – поддержка многоколоночных подзапросов. Здесь нужны именно тесты.
- `DEFAULT_PK_FIELD` – настройка поля первичного ключа по умолчанию, например UUID.
- Перенос моделей между приложениями.

Есть и менее масштабные PR: `QuerySet.executed_queries`, partitioned cookies, поддержка HTTP-метода QUERY и более понятные сообщения отладки CSRF при работе за прокси.

Это кандидаты на включение, а не гарантированный состав Django 6.2. Им ещё нужны проверки и доработка.

В очереди также более 150 идей. Среди тем для обсуждения – таймауты задач, SRI, import maps и разбор URL баз данных и кешей.

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

https://www.djangoproject.com/weblog/2026/oct/19/quarterly-contributor-outreach/

Читать полностью…

Django Python

🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку

Окружение решает больше, чем кажется.

Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.

AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: /channel/+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: /channel/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: /channel/addlist/2Ls-snqEeytkMDgy
Папка Frontend: /channel/addlist/mzMMG3RPZhY2M2Iy

Полезное сверху:

ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: /channel/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: /channel/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 Python

🐍 Какая зависимость держит ваш Django на старой версии?

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 Python

🔥 Django 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/

Читать полностью…

Django Python

Нечёткий поиск в 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/

Читать полностью…

Django Python

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

Новая версия 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 Python

Wagtail как Django admin на стероидах

Хороший разбор для Django-разработчиков: Wagtail можно использовать не только как CMS, но и как более удобную админку для обычных Django-моделей.

Смысл простой: Django admin быстро даёт UI вокруг моделей, но кастомизация часто превращается в боль. Wagtail даёт более современный интерфейс, нормальную работу с полями, группировку через panels, роли, permissions, rich text, media library, versioning и редакторские workflow.

При этом не нужно переписывать проект под CMS-логику. Wagtail ставится как обычный Django-пакет, добавляется в INSTALLED_APPS, подключается в urls.py, а бизнес-логика, views, forms и templates остаются обычными Django.

Самый практичный случай использования : взять существующий admin.py, перенести модели в Wagtail snippets и постепенно заменить старую админку там, где нужен интерфейс, который не стыдно показать клиенту.

Для внутренних тулзов, CRM, backoffice и контентных разделов это может быть намного приятнее, чем бесконечно допиливать стандартный Django admin.

https://timonweb.com/wagtail/wagtail-as-django-admin-on-steroids/

Читать полностью…

Django Python

🖥 GitHub Pages можно пересобрать почти на голом Python.

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

Идея простая:

• http.server отдаёт статические файлы

• небольшой Python-код добавляет логику деплоя

• автоматизация обновляет сайт после изменений

• HTTPS можно прикрутить без отдельного большого стека

Главный кайф не в том, чтобы «убить GitHub Pages», а в том, чтобы понять механику под капотом.

Статический хостинг - это не магия. Это файловая раздача, маршруты, деплой, сертификаты и немного аккуратной автоматизации.

Хороший материал для тех, кто хочет лучше понимать web-инфраструктуру, а не просто нажимать кнопку Deploy.

https://blog.klemek.fr/articles/2026-06-14/

Читать полностью…

Django Python

🖥 Python в 2026 - уже не просто «первый язык программирования».

Это инструмент, с которым можно автоматизировать задачи, писать скрипты, собирать проекты, работать с данными, делать ботов и использовать ИИ как ускоритель разработки.

Но есть проблема: большинство новичков учат Python кусками. Немного синтаксиса, пару задачек, немного теории - и потом ступор: «а что с этим делать дальше?»

Этот курс сделан иначе. Здесь упор на реальную практику: вы не просто смотрите уроки, а постепенно учитесь писать код, разбирать ошибки, собирать рабочие решения и понимать, как Python применяется в нормальных задачах.

Что внутри:

- Python с нуля понятным языком
- практика вместо бесконечной сухой теории
- реальные задачи и проекты
- автоматизация рутины
- работа с файлами, данными и API
- понятная логика программирования
- современный подход к разработке с ИИ
- отдельный акцент на вайбкодинг

Вайбкодинг -это умение правильно ставить задачу, проверять код, понимать результат и ускорять работу без слепого копирования. В 2026 году это уже не бонус, а нормальный навык разработчика.


Сегодня скидка 60 процентов:
https://stepik.org/course/288218/info

Читать полностью…

Django Python

🐍 Полезный Django-совет

Если вы работаете с Django ORM и выбираете связанные объекты,
не делайте лишние запросы к базе.

Частая ошибка:


for post in Post.objects.all():
print(post.author.name)



Если у вас 100 постов — Django сделает 101 SQL-запрос
(1 для постов + 100 для авторов).

Это называется N+1 проблема.

Исправляется одной строкой:

posts = Post.objects.select_related("author")

for post in posts:
print(post.author.name)


Теперь Django сделает один JOIN-запрос,
и все авторы загрузятся сразу.

Когда использовать:

select_related() - для ForeignKey и OneToOne

prefetch_related() - для ManyToMany и reverse relations

posts = Post.objects.prefetch_related("tags")

💡 Правило:
если вы обращаетесь к связанным объектам в цикле - почти всегда нужен select_related или prefetch_related.

Это может ускорить страницу в десятки раз.

#django #python

Читать полностью…

Django Python

🖥 Большинство “парсеров” умирают через 2 дня.
Ты научишься делать те, которые живут в проде.

Это не про BeautifulSoup ради галочки.
Это про системы сбора данных, которые:

• не падают от мелких правок на сайте
• собирают данные в разы быстрее
• обновляют всё сами по расписанию
• обходят ограничения и баны
• выглядят как сервис, а не хаос из файлов

Ты начнёшь видеть сайты не как страницы, а как источники данных, к которым можно подключиться.

В итоге ты сможешь:

• забирать данные для своих проектов
• автоматизировать чужую рутину
• делать инструменты для аналитики
• брать коммерческие заказы на сбор данных

Это навык, который напрямую превращается в деньги.
Не “знаю Python”, а умею добывать данные из интернета профессионально.

🎁 48 часов скидка 50% на Stepik: https://stepik.org/a/269942/

Читать полностью…

Django Python

Вышли первые выпуски IT-покера от K2 Cloud

Турнир, где айтишники собирают идеальные билды из карт, интуиции и навыков. Вместо привычной колоды — технологии, сервисы и архитектурные решения.

Идем смотреть

Читать полностью…

Django Python

🖥 На Stepik вышел курс, который учит работать с Docker на реальных проектах.

Владение Docker - навык, который отличает новичка от профи,

Сегодня почти всё разворачивается в контейнерах.

Если ты не умеешь работать с Docker, ты медленнее, зависим от чужих настроек и постоянно ловишь баги «у меня локально работает».

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

Только практика и реальные кейсы от авторов Docker Академии- с нуля до уверенного уровня.

🎁 Скидка 40 процентов действует 48 часов


👉 Записывайся и сделай Docker своим настоящим рабочим инструментом.

Читать полностью…

Django Python

⚡️ Базовая аутентификация в Django: как сделать правильно

В статье рассматривается, как настроить базовую (Basic) аутентификацию в Django для API и защищённых ресурсов.

Что такое Basic Authentication
Это самый простой способ аутентификации по HTTP: клиент отправляет логин и пароль в заголовке Authorization: Basic …, закодированные в base64. Подходит для API, но требует HTTPS, так как пароль передаётся в каждом запросе.

Django по умолчанию не предоставляет Basic Auth для view-функций. Он есть только в Django REST Framework. Если нужен собственный API или простая защита эндпоинтов без DRF — придётся реализовать самому.

Подход из статьи
Автор показывает, как создать middleware или декоратор, который:
- проверяет заголовок Authorization
- декодирует базу64
- валидирует логин/пароль
- возвращает 401 Unauthorized, если аутентификация не прошла

Пример (упрощённо):
1) Извлекаем заголовок
2) Проверяем, что он начинается с Basic
3) Декодируем base64
4) Сравниваем с нужными учётками

Для Django-view это можно обернуть в декоратор и использовать так:


@basic_auth_required
def my_view(request):
…


Плюсы
– очень лёгкий способ защитить API
– работает без дополнительных библиотек
– гибко настраивается

Минусы
– нет сессий, токенов, CSRF и других продвинутых схем
– подходит только под HTTPS
– пароль передаётся в каждом запросе

Кому полезно
Если нужен простой API или внутренняя служба, где полноценный OAuth/JWT:

https://adamj.eu/tech/2025/12/08/django-basic-authentication/

Читать полностью…
Subscribe to a channel