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

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

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

Откажитесь от unicode-строк

Во второй версии Python была поддержка unicode, но её каждый раз надо было включать символом …

Воспользуйтесь циклами

При написании программ часто возникает потребность делать одно и то же действие для нескольких объектов. …

Избавьтесь от знаков препинания в заголовках

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

Отделите кадры от ANSI кодов

Я предлагаю выводить каждый ANSI-код в отдельном `print`, как тут: ![](https://devman.org/filer/canonical/1611248434/28/) Если отделить ANSI-коды от …

Дополните кнопки бота ручным вводом

С точки зрения бота кнопка - это просто шорткат для быстрого ввода сообщения. Кнопки не …

Выберите основной вид кавычек

Язык Python поддерживает два вида символов кавычек: одинарные `'` и двойные `"`. Есть несколько условных …

Не путайте файл и путь к нему

Работа с файлами неразрывно связана с путями, названиями файлов и их расширениями. Возьмёшься за одно …

Добавьте в репозиторий .gitignore

Этот файл защитит ваш репозиторий от разного мусора. Также к “мусору” относятся папки `.idea`, `__pycache__`, …

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

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

Разбейте профиль на отдельные настройки

Профили настроек вроде `production`, `test` или `development` для настроек -- это хоть и популярная, но …

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

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

Избавьтесь от my_...

Если эта переменная "ваша", то кто создавал остальные? :) Из-за этого префикса `my_` весь проект …

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

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

Почините ALLOWED_HOSTS

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

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

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

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

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

Заставьте планету крутиться на месте

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

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

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

Используйте contextlib.suppress

Если программист хочет проигнорировать какое-нибудь исключение, то часто получается подобный код: ```python try: os.remove('somefile.tmp') except …

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

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

Сбросьте настройки после анимации

Вы не сбросили настройки терминала, которые добавили с помощью ANSI-кодов. В Repl это не заметно, …

Верните числа в текст речи

Фёдор Петрович просил оставить числа в тексте. Без них он не может прочитать речь, ведь …

Используйте комбинацию num2words и transliterate

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

Сократите размер блоков `try...except`

Внутри `try...except` должен быть только тот код, для которого этот блок был добавлен. Излишняя логика …

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

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

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

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

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

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

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

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

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

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

Перекодируйте текстовый файл после скачивания

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

Почините извлечение filename из url

Нельзя отрезать кусочек `url` после последнего `/` и надеяться, что это название файла. В url …

Уточните название файла

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

Используйте split из модуля os.path

Функция `os.path.split` возвращает имя файла и путь до него. Она уже есть в стандартной библиотеке, …

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

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

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

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

Отделите шаблон от остального кода

Если вы назвали переменную "шаблон письма", то пусть в ней лежит именно шаблон. Вы же …

Отделите заголовки от шаблона

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

Добавьте обработку ошибок VK api

Все запросы к VK API всегда возвращают статус код `200`, даже если там произошла ошибка. …

Приведите README в порядок

README — это лицо проекта. От его вида и содержания сразу же складывается первое впечатление, …

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

Скриптовые утилиты часто приходится использовать из консоли. Лезть в readme, ради того чтобы вспомнить, что …

Дождитесь закрытия сокета

Начиная с Python 3.7 в asyncio появился дополнительный метод у сокета. Он позволяет не только …

Настройте range

Стандартный `range` можно настроить так, чтобы он начинал счет не с нуля, а с единицы …

Исправьте имена персонажей в анкетах

Игроки Метро&Монстры захотят создавать анкеты с персонажами разного пола. Методы `first_name` и `last_name` из библиотеки …

Вынесите общие функции в отдельный файл

В разработке часто встречается ситуация, когда в разных скриптах нужны одни и те же функции. …

Оформите код и списки

Чтобы многострочный код и списки лучше читались, их тоже нужно специальным образом оформить. Без Markdown …

Запретите QuerySet chaining

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

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

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

Используйте отдельные коммиты для каждого улучшения

Здесь и далее оформляйте **каждое** улучшение в отдельный коммит. Это поможет отточить навыки работы с …

Приберитесь за собой

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