Типичные улучшения

Для поиска по тегу начните название тега с символа '@'.

Улучшения, показаны 50 из 148.

Подготовьте код Django к изменению URL схемы

URL схема сайта иногда всё-таки меняется. Если сейчас по коду раскиданы фрагменты адресов `'/post/'` и …

Почините конфликт Vue.js и Django

Пропала текстовка, что располагась между первой картинкой и галереей снизу. ![Скриншот](https://i.imgur.com/eGvUkms.png) Проблема в конфликте между …

Почините конфликт Vue.js и Django

Пропала текстовка, что располагась между первой картинкой и галереей снизу. ![Скриншот](https://i.imgur.com/eGvUkms.png) Проблема в конфликте между …

Возьмите настройки из django.conf.settings

Импорт настроек проекта напрямую из файла `settings.py` ломает механизм конфигурации Django. Проблем здесь сразу несколько. …

Отключите кэш в дата-миграции

Вообще, в питоне не принято сильно заботиться о памяти. Но это до тех пор, пока …

Используйте json_script

Перенести из template во view

Сократите количество запросов к БД

Запросы к базе данных — одна из самых медленных операций в работе сайта. Если откинуть …

Используйте стандартное поле id / pk

К списку полей каждой модели данных Django автоматически добавляет поле `id`. Оно есть у всех …

Отделите STATIC_ROOT от STATICFILES_DIRS

Пока мы занимаемся отладкой django берёт на себя функции веб-сервера и веб-приложения. Обычно эти роли …

Упорядочьте атрибуты модели данных

В моделях данных Django есть стандартная последовательность записи: сначала поля, потом менеджер объектов, `class Meta` …

Изолируйте миграцию от остального кода

В миграциях Django ни в коем случае нельзя использовать код из models.py и прочих файлов …

Посчитайте количество записей на стороне БД

В Django количество записей внутри `QuerySet` можно посчитать с помощью самой обычной функции `len(…)`. Выглядит …

Спрячьте пустой default в текстовых полях

Обычно Django кладёт `None` во все незаполненные поля модели данных. Пустой `IntegerField` — это `None`, …

Запретите дубли в БД

Для поиска записей в БД сейчас вы используете не `id`, а своё собственное поле-ключ, и …

Возьмите настройки из django.conf.settings

Импорт настроек проекта напрямую из файла `settings.py` ломает механизм конфигурации Django. Проблем здесь сразу несколько. …

Не удаляйте миграции БД

**Что сделано, то сделано.** Но больше так не делайте, пожалуйста. Django работает с миграциями примерно …

Укажите related_name

Писать запросы к БД будет проще, если обратные связи сразу получат говорящие названия — `related_name`. …

Используйте QuerySet.first()

В Django ORM есть много полезных методов. Один из них — это `first`. Он позволяет …

Используйте PhoneNumberField

Номер телефона — это самый простой способ найти клиента на сайте. Но если номер телефона …

Отключите кэш в дата-миграции

Вообще, в питоне не принято сильно заботиться о памяти. Но это до тех пор, пока …

Выберите более подходящий тип поля

В Django ORM есть отдельное поле для картинок, отдельное для файлов, для чисел всех мастей... …

Добавьте в url pattern закрывающий слэш

В Django принято заканчивать адреса страниц слэшом `/`: `/some/page/`. Это правило позволяет избежать путаницы в …

Настройте проброс данных через реверс-прокси

Реверс-прокси -- это посредник, задача которого "передать" запрос от внешнего клиента ко внутреннему веб-сервису. При …

Замените дефолтное значение DEBUG на False

Дефолтные значения должны быть безопасными. В этом их смысл: иногда настройки с дефолтными значениями будут …

Используйте related_name

Django не зря предлагает использовать в запросах `related_name`, с ними код получается куда проще и …

Замените поля CharField / TextField

В базе данных `CharField` и `TextField` представлены по-разному. `CharField` — это поле фиксированного размера, в …

Обработайте DoesNotExist

При вызове метода `QuerySet.get(…)` может так случиться, что искомой записи в базе не будет, и …

Добавьте блок в базовый шаблон

В шаблонах не зря используют наследование. С его помощью общую логику, что повторяется на всех …

Переместите файл в статику

Все картинки на сайте делятся на две группы: статику и медиа. Первые намертво пришиты к …

Уточните критерий поиска

Если бы автоинспеция искала машины по ФИО водителя, штрафы бы постоянно приходили не тем людям. …

Используйте format_html для подстановки в HTML

Функция `format_html` в Django похожа по своим возможностям на обычное форматирование строк. Она тоже подставляет …

Уберите из админки огромные select-поля

Для полей `ForeignKey` Django в админке использует виджет ``. Он предлагает пользователю выбрать из одну …

Используйте шорткат render

Вместо нескольких строчек с загрузкой шаблона и его обработкой: ```python def show_phones(request): template = loader.get_template('product_page.html') …

Используйте verbatim на весь тег

Вы используете `{% verbatim %}`, но он захватывает какую-то рандомную область в шаблоне. Получается, что …

Настройте метод *_or_create

Оба метода и `get_or_create`, и `update_or_create` ищут записи в БД с точным совпадением по всем …

Не меняйте стандартные методы Model.save, delete, create

В документации Django и других статьях авторы часто советуют поместить код прямо внутрь метода `save` …

Проверьте адрес перед редиректом

С параметром `next` есть известная уязвимость: если не проверять куда вы делаете редирект, то ваш …

Замените aggregate на annotate

`annotate` и `aggregate` выполняют схожие задачи: снижают количество запросов к БД. Но в то время …

Соберите переменные окружения в settings.py

Когда другой программист захочет развернуть проект, то первым делом он пойдёт искать переменные окружения в …

Используйте исключения из атрибутов модели

Django создаёт исключения `DoesNotExist` и `MultipleObjectsReturned` как атрибуты каждой модели, чтобы можно было обработать ошибку …

Измените настройки STATICFILES_DIRS

После `BASE_DIR` папка верхнего уровня у всех путей одна

Отформатируйте длинный QuerySet

Запросы в Django ORM бывают большими и сложными. Даже десять строк кода на один запрос …

Высушите related_name

В Django код запросов к БД имеет свойство распухать до неприличных размеров. И чем длиннее …

Уберите дефолтное значение для SECRET_KEY

Настройка `SECRET_KEY` очень важна для django-проекта. По сути, это так называемая соль (salt), отвечающая за …

Высушите название поля

В Django код запросов к БД имеет свойство распухать до неприличных размеров. И чем длиннее …

Разрешите полю повторяться

Почему это поле -- уникально? Разве в БД не может быть несколько записей с одинаковым …

Запретите полю повторяться

У каждой записи в этом поле обязательно должны быть разные значения. Одинаковых быть не может, …

Используйте json_script

Перенести из template во view