Содержание

Настройка VSCode для Django

В статье вы найдете настройки VSCode для проектов на фреймворке Django.

Как настроить VSCode для разработки на фреймворке Django.

Сухо и по делу опишу как сделать настройки, которые позволят:

  • задать виртуальное окружение для проекта;
  • настроить flake8 без сбоев;
  • запускать команду runserver через кнопку Run ▶️;
  • запускать pytest-тесты через кнопки на вкладке тесты;
  • наводить «порядок» в импортах, при сохранении python-файла;
  • установить «линейку» на 79 символов, чтобы было проще соответствовать PEP8;
  • запускать django-тесты через кнопки на вкладке Run.

1. Установка плагинов

Для начала следует установить следующие плагины:

2. Настройки для VSCode:

  1. В папке проекта создать папку .vscode, возможно, она уже была автоматически создана.
  2. В папке .vscode добавить файл launch.json, со следующим содержимым:
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "args": [
                "runserver"
            ],
            "django": true
        },
        {
            "name": "Python: Django Tests",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}/manage.py",
            "args": [
                "test",
            ],
            "django": true
        },
    ]
}

Этими настройками мы делаем возможным:

  1. запуск сервера-разработки django — runserver через кнопку;
  2. запуск django-тестов manage.py test через кнопку.

В папке .vscode добавить файл settings.json, со следующим содержимым:

{
    // путь к вашему виртуальному окружению
    // на Windows «bin» нужно заменить на «Scripts», «python» на «python.exe»
    // вместо «/» использовать «//», либо «\»
    "python.pythonPath": "<путь к вашему виртуальному окружению>/bin/python",
    "python.testing.pytestArgs": [],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.pytestEnabled": true,
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": false,
    "python.linting.flake8Enabled": false,
    // путь к месту установки flake8, если он не установлен внутри вирт. окружения проекта
    "cornflakes.linter.executablePath": "<путь к вашему flake8>",
    "cornflakes.linter.run": "onType",
    "files.insertFinalNewline": true,
    "editor.rulers": [
        80,
    ],
    "workbench.editor.enablePreview": false,
    "editor.minimap.enabled": false,
    "[python]": {
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        }
    }
}

3. Настройки для python-проекта.

Если у вас в корневой папке проекта еще нет файла setup.cfg, то добавляем его, если же есть то просто вставляем следующий кусок кода:

[isort]
balanced_wrapping = false
blocked_extensions=rst,html,js,svg,txt,css,scss,png,snap,tsx
combine_as_imports = true
default_section = THIRDPARTY
force_single_line = false
force_to_top = django
include_trailing_comma = true
known_third_party = django
line_length = 79
lines_between_types=1
multi_line_output = 5
skip=.git,LC_MESSAGES,.pytest-cache
skip_glob=*/migrations/*,*/__pycache__/*
use_parentheses = true

Этот код настраивает isort для сортировки импортов, согласно код-стайлу Django:

Располагайте импорты в следующие группы: future, стандартная библиотека, внешние библиотеки, другие компоненты Django, локальные компоненты Django, try/except-ы.

Сортируйте строки в каждой группе по алфавиту по полному имени модуля. Располагайте все import module, до from module import ... в каждой секции.

Используйте абсолютные импорты для других компонентов Django и относительные импорты для локальных компонентов.»

На каждой строчке располагайте элементы в алфавитном порядке, сначала всё что в верхнём регистре, затем элементы в нижнем.

Длинные строки переносите при помощи скобок, делайте отступ в 4 пробела на последующих строках. После последнего импорта ставьте запятую, и располагайте закрывающую скобку на новой строке.

Между последним импортом и кодом модуля ставьте оставляйте одну пустую строку, две пустые строки, если далее идёт функция или класс.

Пример из документации Django (комментарии в коде только для примера):

# future
from __future__ import unicode_literals

# standard library
import json
from itertools import chain

# third-party
import bcrypt

# Django
from django.http import Http404
from django.http.response import (
    Http404, HttpResponse, HttpResponseNotAllowed, StreamingHttpResponse,
    cookie,
)

# local Django
from .models import LogEntry

# try/except
try:
    import yaml
except ImportError:
    yaml = None

CONSTANT = 'foo'


class Example:
    # ...

Надеюсь, было полезно :)