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

В статье вы найдете настройки VSCode для проектов на фреймворке Django.
Как настроить VSCode для разработки на фреймворке Django.
Сухо и по делу опишу как сделать настройки, которые позволят:
- задать виртуальное окружение для проекта;
- настроить
flake8
без сбоев; - запускать команду
runserver
через кнопку Run ▶️; - запускать
pytest
-тесты через кнопки на вкладке тесты; - наводить «порядок» в импортах, при сохранении
python
-файла; - установить «линейку» на 79 символов, чтобы было проще соответствовать PEP8;
- запускать django-тесты через кнопки на вкладке Run.
1. Установка плагинов
Для начала следует установить следующие плагины:
- Python — обычно он предустановлен;
- Cornflakes;
- Djaneiro.
2. Настройки для VSCode:
- В папке проекта создать папку
.vscode
, возможно, она уже была автоматически создана. - В папке
.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
},
]
}
Этими настройками мы делаем возможным:
- запуск сервера-разработки django —
runserver
через кнопку; - запуск 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:
# ...
Надеюсь, было полезно :)