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

в 20:15, , рубрики: django, django framework, python, Visual Studio, visual studio code
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 – пакет для автоматического форматирования кода

  • pylint – статический анализатор кода

  • isort – пакет для сортировки объявлений import

  • mypy – пакет для проверки статических типов

Плагины

  • django-pylint – плагин pylint, улучшающий анализ кода Django.

  • django-stubs – плагин mypy, предоставляющий более точные статические типы для Django.

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

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

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

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

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, неработоспособны без расширения 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 👆

Автор: Анатолий Никифоров

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js