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

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

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

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

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

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

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

Почините настройку DEBUG

Любое непустое значение в переменной окружения включает отладочный режим, даже если это `DEBUG=FALSE`.

Удалите лишние all()

Метод `all()` нужен для того, чтобы запросить у менеджера объектов `Book.objects` первый объект запроса — …

Спрячьте SECRET_KEY

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

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

В файле settings.py есть настройка `DEBUG`, она включает отладочный режим работы сайта. На локальной машине …

Разрешите полям оставаться пустыми

Менеджерам будет сложно наполнять БД, если все поля являются обязательными для заполнения. Часто всех нужных …

Запретите каскадное удаление

У поля `ForeignKey` в модели данных есть обязательный атрибут `on_delete`, он задает правило удаления записей …

Запретите null в строковых полях БД

Если в CharField разрешить хранить `None`, то в каждом запросе к базе придется указывать сразу …

Добавьте файлы миграций БД

Если обновление в коде требует изменений структуры БД, а файлов с миграциями в репозитории не …

Воспользуйтесь методом QuerySet.get

Поиск записи в базе данных по ключу, например, по `id` или `slug`, требуется настолько часто, …

Сделайте миграцию идемпотентной

Использование метода `create` в коде дата-миграции часто мешает запустить её повторно — каждый запуск создает …

Укажите русскоязычный verbose_name

Атрибут `verbose_name` задает те названия, что получат поля модели данных при отображении в админке. Русскоязычный …

Укажите related_name во множественном числе

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

Добавьте DB к названию переменной окружения

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

Почините сломанную миграцию

Миграция выглядит сломанной. Такое случается, если не протестировать её после изменений в коде. И это …

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

При вызове метода `QuerySet.get` помимо исключения `DoesNotExist` возможна еще одна ситуация — вместо одной записи …

Явно укажите способ сортировки

Если в запросе не указан способ сортировки, то, значит, он не важен. База данных сделает …

Уточните о каком пользователе речь

Ничто не встречается в моделях данных так же часто, как ссылка на юзера через `ForeignKey` …

Положите статику в репозиторий

В репозитории не хватает файлов статики. Без них сайт в браузере отображается некорректно.

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

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

Протестируйте related_name

Запросы с использованием такого `related_name` выглядят супер-странно.

Оптимизируйте запрос ORM

Код вытягивает из базы данных слишком много данных, столько просто не нужно. Чем больше выборка, …

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

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

Почините Add another для картинок

![](https://dvmn.org/filer/canonical/1600270419/713/) [Ссылка на скриншот](https://dvmn.org/filer/canonical/1600270419/713/) Там, где загружена картинка, слева показано название загруженного файла, а справа …

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

Проблема отправки JSON по API не новая, и вместо использования `json.dumps()` уже давно используют другой …

Избавьтесь от дублирования данных в БД

В БД не должно быть избыточности данных. **Избыточность** -- это когда одни данные можно получить …

Не доверяйте FloatField точные вычисления

FloatField хранит данные как питоновский `float` и наследует все его проблемы. Например, вычисления с `float` …

Почините ALLOWED_HOSTS

В чём тогда смысл настройки, если в ней лежат домены, которые вам не принадлежат? Она …

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

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

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

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

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

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

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

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

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

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

Запретите QuerySet chaining

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

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

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

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

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

Высушите super()

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

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

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

Используйте декоратор @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 позволяет продолжить настройку …

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

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

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

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

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

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

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

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

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

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