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

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

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

Вынесите chat_id из кода

Сейчас настройка `chat_id` намертво зашита в скрипте и без правок в коде её никак не …

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

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

Удалите пробелы из примера .env

В вашем README есть пример заполнения файла с конфигами. Дело в том, что так их …

Используйте livereload cli

Библиотека livereload предоставляет два интерфейса. Есть обычная библиотека, её можно импортировать и вызвать одну из …

Переименуйте CSS классы в kebab-case

Как и в Python для CSS классов есть свои правила по наименованию. Придерживайтесь их, чтобы …

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Высушите related_name

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройте .gitignore

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

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

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

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

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

Добавьте Devman в опыт работы

Чтобы пройти в фильтры HR, стоит добавить хоть какой-то опыт. Мы не советуем никого обманывать …

Вернитесь к исходному формату данных

Сведения о покупке будут приходить в программу в таком виде: ```python products = [ # …

deprecated
Перераспределите ответственность между функциями (bitly)

Функция, которая делают всё сразу, затрудняет программирование. Функцию трудно переиспользовать, если она делает несколько действий. …

deprecated
Вынесите общие алгоритмы в общие функции [не исправлено]

Следующий фрагмент кода избавляет от дубликации кода: ```python if job_service == 'hh': vacancies = get_vacancies_from_hh(language) …

deprecated