- PVSM.RU - https://www.pvsm.ru -
pip install django black isort pylint pylint-django mypy django-stubs
{
"editor.formatOnSave": true,
"python.formatting.provider": "black",
"python.formatting.blackArgs": [
"--line-length=120"
],
"python.linting.pylintEnabled": true,
"python.linting.enabled": true,
"python.linting.lintOnSave": true,
"python.linting.pylintArgs": [
"--load-plugins",
"pylint_django",
"--django-settings-module=core.settings",
"--max-line-length=120"
],
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
"python.linting.mypyEnabled": true
}
[mypy]
plugins =
mypy_django_plugin.main
[mypy.plugins.django-stubs]
django_settings_module = "core.settings"
[settings]
profile=black
Настройка Visual Studio Code для работы над проектами Django немного отличается от типичного сетапа для pure Python проектов. Например, в Django мало пользы от mypy, так как он не поддерживает типы Django. Точно также дела обстоят с линтерами, которые, без предварительной настройки, работают с кодом Django неправильно.
Эти проблемы можно решить файлами конфигураций соответствующих инструментов, но я использую готовые плагины для mypy и pylint.
black [1] – пакет для автоматического форматирования кода
pylint [2] – статический анализатор кода
isort [3] – пакет для сортировки объявлений import
mypy [4] – пакет для проверки статических типов
django-pylint [5] – плагин pylint, улучшающий анализ кода Django.
django-stubs [6] – плагин mypy, предоставляющий более точные статические типы для Django.
Начну с нуля и буду двигаться к настройкам Visual Studio Code.
Я предпочитаю разрабатывать новые проекты в контейнерах Docker [7] с помощью расширения Visual Studio Code Remote Development [8]. Также можно использовать виртуальное окружение [9], активировать его и выполнить команду:
pip install django black isort pylint pylint-django mypy django-stubs
Для сетапа достаточно стартового проекта Django, который можно получить следующей командой:
django-admin startproject core .
Получаем структуру директорий:
.
├── core
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
Я не буду создавать новое приложение Django. Вместо этого я продолжу интеграцию инструментов в этот проект, а вы позднее добавите свое приложение в уже готовую, удобную среду разработки.
Настройки, которые мы хотим применить к проекту Django, неработоспособны без расширения [10] Python для Visual Studio Code.
От проекта к проекту конфигурация инструментов и сами инструменты могут меняться. Поэтому Visual Studio Code разделяет настройки проектов на пользовательские (глобальные) и настройки рабочих пространств. Настройки рабочих пространств привязаны к конкретному проекту. Их можно изменять предварительно создав в корне проекта директорию .vscode
с файлом settings.json
внутри. В этом файле определяются настройки для рабочего пространства:
{
"editor.formatOnSave": true,
"python.formatting.provider": "black",
"python.formatting.blackArgs": [
"--line-length=120"
],
"python.linting.pylintEnabled": true,
"python.linting.enabled": true,
"python.linting.lintOnSave": true,
"python.linting.pylintArgs": [
"--load-plugins",
"pylint_django",
"--django-settings-module=core.settings",
"--max-line-length=120"
],
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
"python.linting.mypyEnabled": true
}
Форматировать код во время сохранения файла (⌘+S):
"editor.formatOnSave": true,
Установить провайдер форматирования black:
"python.formatting.provider": "black",
Black использует длину строки по-умолчанию в 88 символов. Нужно перезаписать это значение согласно принятому для Django соглашению:
"python.formatting.blackArgs": [
"--line-length=120"
],
"python.linting.pylintEnabled": true,
Включаем возможности линтинга:
"python.linting.enabled": true,
Включаем линтинг во время сохранения файла (⌘+S):
"python.linting.lintOnSave": true,
Интегрируем плагин django-pylint и меням длину строки:
"python.linting.pylintArgs": [
"--load-plugins",
"pylint_django",
"--django-settings-module=core.settings",
"--max-line-length=120"
],
"editor.codeActionsOnSave": {
"source.organizeImports": true
},
black имеет встроенную сортировку импортов, отличную от isort. Чтобы два инструмента не конфликтовали, настроим isort на использование сортировки black. Для этого пишем в файл .isort.cfg
в корне проекта:
[settings]
profile=black
"python.linting.mypyEnabled": true
Пишем в файл .mypy.ini
в корне проекта:
[mypy]
plugins =
mypy_django_plugin.main
[mypy.plugins.django-stubs]
django_settings_module = "core.settings"
Попробуйте начать писать новое приложение с моим сетапом, надеюсь вам понравится!
Мой канал в Telegram 👆
Автор: Анатолий Никифоров
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/380915
Ссылки в тексте:
[1] black: https://black.readthedocs.io/en/stable/
[2] pylint: https://pylint.pycqa.org/en/latest/
[3] isort: https://pycqa.github.io/isort/
[4] mypy: http://mypy-lang.org/
[5] django-pylint: https://pypi.org/project/pylint-django/
[6] django-stubs: https://github.com/typeddjango/django-stubs
[7] Docker: https://www.docker.com/
[8] Remote Development: https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack
[9] виртуальное окружение: https://docs.python.org/3/library/venv.html
[10] расширения: https://marketplace.visualstudio.com/items?itemName=ms-python.python
[11] t.me: https://t.me/bachelorscoding
[12] Источник: https://habr.com/ru/post/701800/?utm_source=habrahabr&utm_medium=rss&utm_campaign=701800
Нажмите здесь для печати.