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

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

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

Отделите сбор логов от их обработки

Если модуль сам настраивает логирование: фильтрует сообщения или пишет их в файл, — то он …

Поправьте множественное число в названиях

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

Зафиксируйте скорость игры

Сейчас темп игры задается исключительно мощностью CPU — чем мощнее процессор, тем динамичнее игра. На …

Сделайте ссылки в документации кликабельными

Если ссылка в документе есть, но кликнуть по ней нельзя, то придется выделить и скопировать …

Используйте UPPER_CASE для переменных окружения

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

Подготовьте скрипт к изменению данных

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

Избегайте глаголов в названиях переменных

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

Добавьте поддержку других доменов Bitly

Чаще всего Bit.ly генерирует ссылки, начинающиеся с домена `bit.ly/`, но это не всегда так. Сервис …

Дайте токену специфичное название

Со временем в дополнение к одному API может понадобиться подключение еще нескольких. У них каждого …

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

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

Используйте общепринятые сокращения

Здорово, когда для переменной удается подобрать короткое и одновременно понятное название. Но если все же …

Не путайте порядок слов в названиях

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

Введите свой тип исключений

Если программа сообщает о проблеме с помощью исключения `Exception('что-то случилось')`, то перехватить его будет сложно. …

Покажите чем отличаются переменные

Если в программе для отправки писем вы встретите переменные `letter_begin`, `letter_middle` и `letter_end`, то наверняка …

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

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

Спрячьте SECRET_KEY

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

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

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

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

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

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

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

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

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

Вынесите решение проблемы наружу функции

Порой функция обещает вернуть полезные данные, но сделать этого не может — не нашла файл, …

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

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

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

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

Разверните скрипт в новом вирт.окружении

Программа не запускается, что-то не то с зависимостями.

Упростите создание словаря

В python есть несколько способов создания словаря. Можно сначала объявить пустой словарь, а затем наполнить …

Удалите временные файлы в случае ошибки

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

Откажитесь от input

Пользоваться программой и тестировать её станет проще, если заменить функцию `input` на стандартную библиотеку `argparse`.

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

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

Унифицируйте запуск корутин

Можно запускать каждую корутину отдельно и индивидуально, но когда их станет много такой подход перестанет …

Выровняйте такты event loop

Остановка одной корутины приводит к сайд-эффекту: следующие за ней корутины пропускают свой "ход". Они не …

Откажитесь от модификации входных аргументов

У Python есть интересная особенность — при вызове функция получает не копию аргументов, а их …

Используйте встроенную в Requests поддержку JSON

При работе с API часто встречаются данные в формате JSON. Встречаются они настолько часто, что …

Укажите default value для аргумента функции

В Python для функции можно задать опциональный аргумент, указав для него значение по умолчанию — …

Разбейте функцию на части

Функции — это строительные блоки вашей программы. Они похожи на детали конструктора Lego — из …

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

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

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

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

Упростите создание списка

В python есть несколько способов создания списка. Можно сначала объявить пустой список, а затем наполнить …

Спрессуйте изменения в словаре

Большинство изменений в словаре: добавление новых ключей и изменение старых значений — можно сжать в …

Отсортируйте импорты

С ростом программ импортов становится всё больше и больше. В некоторый момент их становится так …

Сначала отправляйте, потом удаляйте

В вашем коде вы сначала удаляете старое меню, затем отправляете новое. Лучше делать наоборот: так …

Укажите related_name

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

Запретите свалку в каталоге

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

Задержите следующую попытку переподключения

Если соединение с сервером будет утеряно на пару часов, то всё это время скрипт будет …

Используйте textwrap.dedent

Чтобы multiline строки не ломали отступы в коде функций и других блоков используйте функцию `dedent` …

Выделите содержимое блочных тегов

Блоки вёрстки внутри тегов `div`, `p` и прочих блочных элементов принято выделять отступами, чтобы визуально …

Добавьте в README инструкции по установке

При чтении документации пользователя прежде всего интересует как установить программу.

Изолируйте функцию от внешнего окружения

С функциями, которые берут свои настройки из переменных окружения сложно работать. Прочитайте объявление такой функции …

Используйте методы от объектов, а не классов

Если у вас есть `visit`, у которого есть метод `.some_method()`, то в питоне принято вызывать …

Удалите неиспользуемый код

За неиспользуемым кодом никто не будет следить, ведь он никому не нужен. А раз так, …

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

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