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

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

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

Запретите отрицательные цены в БД

Сейчас цена заказа может оказаться отрицательной, по крайней мере база данных такого не запрещает. Можно …

Сделайте поле обязательным

Записи в БД просто не имеют смысла без некоторых полей. Ниже несколько примеров таких ситуаций: …

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

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

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

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

Используйте безопасные дефолтные значения в полях моделей

Дефолтные значения нужны для того, чтобы оставлять какие-то поля незаполненными и при этом ни о …

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

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

Перечислите сериализуемые поля

Допустим, вы пишете сериализатор для модели `YoutubeVideo`: ```py class YoutubeVideoSerializer(ModelSerializer): class Meta: model = User …

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

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

Оберните код в транзакцию

Транзакции позволяют объединить несколько запросов к БД в одну неделимую операцию. Либо сработают все запросы, …

Запретите QuerySet chaining

Методы `QuerySet` возвращают либо итоговое число/объект, либо новый `QuerySet`. Этот новый QuerySet позволяет продолжить настройку …

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

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

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

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

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

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

Протестируйте сериализатор на пустые значения

Вам можно отправить пустой заказ, вообще без товаров. Не очень понятно как поведёт себя система …

Запретите отрицательное/нулевое количество товаров

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

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

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

Высушите super()

Вы использовали старую форму записи функции `super()`, так её оформляли ещё во втором питоне. Сейчас …

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

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

Замените JSONField на жёсткую схему данных

Поле `JSONField` позволяет хранить в БД любую структуру данных. Иногда, это важный плюс, но чаще …

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

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

Высушите related_name

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

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

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

Используйте декоратор @register

Это не какая-то проблема в коде, просто хотел посоветовать попробовать [декоратор @register](https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#the-register-decorator). Так регистрация моделей …

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

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

Переместите сборку фронтенда внутрь Dockerfile

Контейнеризация с помощью Docker требует разделить поставку приложения на две фазы: сборка и запуск. За …

Отключите фоновую сборку фронтенда на сервере

Сборщики фронтенда, такие как Webpack и Parcel, поставляются вместе с отладочным сервером на Node.js, умеющем …

Почините QuerySet chaining

Методы `QuerySet` возвращают либо итоговое число/объект, либо новый `QuerySet`. Этот новый QuerySet позволяет продолжить настройку …

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

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

Вынесите настройку ALLOWED_HOSTS

В файле settings.py есть настройка `ALLOWED_HOSTS`, она нужна для безопасности вашего сайта, защищает вас от …

Расширьте лимит CharField

Если имя пользователя не влезет в вашу БД — ему будет неприятно. Если адрес не …

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

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

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

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

Переместите файл в другой app

Разбиение проекта по приложениям нужно как раз для того, чтобы в проекте можно было очень …

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

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

Не используйте get_object_or_404 вне View

Функция `get_object_or_404` нужна для View. Вне View её использовать не стоит. Вместо неё лучше используйте …

Переопределите SECRET_KEY

В файле settings.py есть настройка `SECRET_KEY` — это секретный ключ, с помощью которого шифруют пароли …

Запускайте migrate в самом конце

Запуск migrate может поломать ещё работающую старую версию Django. Чтобы простой сайта был меньше, лучше …

Запустите сайт из виртуального окружения

Почему-то на сервере все зависимости Python поставлены на уровне системы вместо виртуального окружения. Это помешает …

Положите деплойный скрипт в репозиторий

Деплойный скрипт -- не одноразовый. Это часть кода, часть его поставки. Его тоже нужно будет …

Отключите DEBUG на продакшн-версии сайта

Сейчас ваш сайт запущен как бы "в режиме продакшна", но у сайта включен дебаг. Из-за …

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

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

Используйте метод .create() сериализатора

Сериализатор может сам создавать модели, если он унаследован от `ModelSerializer`, или если у него есть …

Используйте many=True для вложенных сериализаторов

Если вы используете сериализатор, в котором вложено несколько других сущностей, то вместо такой записи: ```py …

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

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

Создайте поисковый индекс

Запросы с использованием `filter` или `exclude` требуют от базы данных проверки каждой записи в таблице …

deprecated
Вынесите статику в папку static/

Для статики есть специальное место: папка `static/` в корне репозитория. Если программисту понадобится поменять что-нибудь …

deprecated