- PVSM.RU - https://www.pvsm.ru -

Настройка Visual Studio Code для Django

TL;DR
pip install django black isort pylint pylint-django mypy django-stubs

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
}

.mypy.ini

[mypy]
plugins =
    mypy_django_plugin.main

[mypy.plugins.django-stubs]
django_settings_module = "core.settings"

.isort.cfg

[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.

Новый проект Django

Начну с нуля и буду двигаться к настройкам Visual Studio Code.

Установка Django и зависимостей

Я предпочитаю разрабатывать новые проекты в контейнерах Docker [7] с помощью расширения Visual Studio Code Remote Development [8]. Также можно использовать виртуальное окружение [9], активировать его и выполнить команду:

pip install django black isort pylint pylint-django mypy django-stubs

Новый проект Django

Для сетапа достаточно стартового проекта Django, который можно получить следующей командой:

django-admin startproject core .

Получаем структуру директорий:

.
├── core
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py

Я не буду создавать новое приложение Django. Вместо этого я продолжу интеграцию инструментов в этот проект, а вы позднее добавите свое приложение в уже готовую, удобную среду разработки.

Настройка Visual Studio Code

Настройки, которые мы хотим применить к проекту 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
}

Включаем black

Форматировать код во время сохранения файла (+S):

"editor.formatOnSave": true,

Установить провайдер форматирования black:

"python.formatting.provider": "black",

Black использует длину строки по-умолчанию в 88 символов. Нужно перезаписать это значение согласно принятому для Django соглашению:

"python.formatting.blackArgs": [
        "--line-length=120"
    ],

Включаем pylint

"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"
    ],

Включаем isort

"editor.codeActionsOnSave": {
        "source.organizeImports": true
    },

Совместимость с black

black имеет встроенную сортировку импортов, отличную от isort. Чтобы два инструмента не конфликтовали, настроим isort на использование сортировки black. Для этого пишем в файл .isort.cfg в корне проекта:

[settings]
profile=black

Включаем mypy

"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