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

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

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

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

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

Уточните название класса

Названия переменных важны. Хорошее название подсказывает программисту, что лежит в переменной и какие методы можно …

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

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

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

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

Избавьтесь от обёртки над requests

Используйте стандартный `response = requests.get(...)`! Да, функция прячет в себя 2 строчки кода, теперь вместо …

Не путайте адрес и путь

Адрес и путь похожи, но это не синонимы. **Путь** -- это локально, в файловой системе. …

Избавьтесь от надписи "Last updated..."

Этот блок не несёт никакого смысла и в нём написана неправда, книги обновлены не 3 …

Избавьтесь от цикла while

Цикл `while` опаснее, чем `for`. Он может запросто застрять в бесконечном цикле, если допустить малейшую …

Избавьтесь от устаревшей is_safe_url

[`url_has_allowed_host_and_scheme`](https://docs.djangoproject.com/en/3.0/_modules/django/utils/http/) -- современный аналог `is_safe_url`. Это есть в коде самой функции, прочитайте внимательно: ``` def …

Избавьтесь от сравнений с пустым списком/словарем

В Python не принято сравнивать с пустым списком/словарём. В языке достаточно инструментов, чтобы записать ту …

Закрывайте файл как можно скорее

Как только данные файла вам не нужны, сразу выходите из контекста `with`. Так файл закроется, …

Итерируйтесь по списку/словарю напрямую

Раньше в C++ итерация по коллекции проходила так: ``` for(int i = 0; i < …

Используйте возможности startswith

Функция `startswith` умеет работать сразу с кортежем (`tuple`) из строк. Поэтому такой код можно сильно …

Оформите ссылки

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

Избавьтесь от устаревшего способа форматирования строк

`%s` -- это старый способ форматирования строк, наследованный ещё из второго питона. Он остаётся для …

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

Вместо нескольких строчек с методом get и его обработкой: ```py def show_posts(request, user_id): try: user …

Почините UI карточки книги

Такая подпись книгам не нужна. Это часть шаблона, которую вы скопипастили, но на самом деле …

Почините HTML title

Вы замечали, что у вкладок браузера есть свои названия? Эти надписи подсказывают на каком сайте …

Избавьтесь от лишних аргументов

Аргументы -- это настройки для функций. Но от настройки нет никакого толку, если менять её …

Переместите файл в другой 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 поставлены на уровне системы вместо виртуального окружения. Это помешает …

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

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

Вынесите установку NodeJS и npm из деплоя

Установка NodeJS и npm -- не часть деплоя. Они должны быть установлены ещё до запуска …

Сделайте деплойный скрипт исполняемым

Программисты будут ожидать от bash-сприпта, что он будет исполняемым и пробовать делать так: ```shell-session ./deploy.sh …

Настройте .gitignore

Улучшение для 3 урока Django

Сообщайте о деплое только после окончания деплоя

Вы уже сообщили в Rollbar о успешном деплое, но ведь его ещё не состоялось! А …

Высушите конфиг Nginx

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

Удалите makemigrations из деплойного скрипта

Django просит вас вручную создавать все необходимые файлы специально. Ведь могла бы и генерировать их …

Заставьте деплойный скрипт замечать ошибки

Если сломается любая из management-команд, то, по идее, деплой должен быть прерван, а по факту …

Обновите зависимости фронтенда

На сайте помимо бекенда есть ещё и фронт. И программисты будут дописывать и его. Помимо …

Подключитесь к git-репозиторию по ssh

При каждом деплое GitHub будет запрашивать ваши логин и пароль. Это жутко неудобно. Настройте remote …

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

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

Отформатируйте конфиг Nginx

Конфиг Nginx -- тоже код, и его тоже будут читать и редактировать другие люди. Стоит …

Почините UI пагинатора

Пагинатор предлагает пользователю листнуть "влево", даже когда пользователь уже на первой странице. ![](https://i.imgur.com/aGvFOEe.png) Чтобы пользователь …

Не используйте mutable-types в качестве аргумента по умолчанию

Изучите возможную ошибку на следующем примере: * [least-astonishment-and-the-mutable-default-argument](https://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argument)

Выровняйте элементы контейнера по линии

Подогнать вёрстку под дизайн бывает сложно. Дизайнер в своём макете задаёт положение каждому элементу на …

Выберите более приличные тестовые данные

Понимаю, часто выбрать в качестве тестового слова `hui` -- очень смешно в процессе выполнения какого-либо …

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

Заголовки -- это особый элемент форматирования текста. Он предназначен для выделения главной мысли в абзаце, …

Отцентрируйте пагинатор

Это не какая-то проблема в вёрстке, просто хотел посоветовать поставить пагинатор по центру. Мне кажется, …