Подготовка Visual Studio Code к проекту Django/Wagtail

Актуально на декабрь 2022 г.

Опишу шаги, которые делаю сам для работы в проекте Django/Wagtail

Подготовка структуры каталогов

Для начала давайте условимся, что у нас есть какой-то каталог для проектов, например
c:\_VS_Projects\
(в линукс окружении путь будет выглядеть по другому, но сути это не меняет)
В этом каталоге у нас может быть много проектов, например
  • test_Django3_Project
  • test_Django4_Project
  • test_Parsing_Project
  • work_Wagtail_Project
В каждом каталоге будем размещать отдельное виртуальное окружение, потому как очевидно, что с проектом Django3 и Django4 надо работать в разных окружениях.
Кроме того в каждом каталоге разместим подкаталоги
  • wagtail_site - непосредственно разрабатываемое решение
  • sources - для накопления исходников.
  • docs - для разного вида записей и документации
  • data - для данных нашего приложения (база данных, результаты парсинга и т.д.)
  • copies - для хранения копий удачных (и не очень) версий файлов проекта...
  • env - каталого для файлов виртуального окружения
#Структура каталога с проектами.
-----------------------------------------------
C:\_VS_PROJECTS
├───test_Django3_Project
├───test_Django4_Project
├───test_Parsing_Project
└───work_Wagtail_Project
    ├───copies
    ├───data
    ├───docs
    ├───env
    ├───sources
    └───wagtail_site

Расширения Visual Studio Code для Django/Wagtail

Ставим следующий список расширений:
  • Python
  • Python Extension Pack (включает в себя расширение python)
  • SSH FS - для работы для подключения к внешним машинам по SSH как для работы с файловыми каталогами, так и работы в терминале удаленных машин
  • Git (хотя я предпочитаю использовать его через командную строку, без расширений)

Виртуальное окружение

Стандартная команда для создания виртуального окружения:
python -m venv env
.\env\scripts\activate
Я рекомендую название папки с файлами виртуального окружения сделать "говорящим", то есть вместо "env" - "env_Django3". Это поможет видеть в VS Code, какое сейчас окружение выбрано рабочим для IDE и какое активировано в терминале...
# активация виртуального окружения
-----------------------------------------------
python -m venv env_wagtail
.\env_wagtail\scripts\activate
python -m pip install --upgrade pip
Теперь важно сделать так, что бы VS code автоматически запускала это виртуальное окружение при переходе в терминал
Ctrl + Shift + p ---> Python: Select Interpreter
Сначала выбрать текущий WorkSpace для которого устанавливаем venv, а затем только укажем папку с файлами виртуального окружения
Если вы все сделали верно, то при открытии нового терминала (ctrl + shift + ~)в нем будет сразу активироваться нужное виртуальное окружение
А если вы откроете любой файл с расширением ".py" (например, test.py), то в нижнем правом углу VS Code также увидите имя актуального виртуального окружения

Установка необходимых пакетов для работы VS Code с проектом Django/Wagtail

Cамое время ставить необходимые пакеты, и начать, конечно же, надо с обновления менеджера пакетов pip
# терминал d:\_VS_Projects\work_Wagtail_Project
-------------------------------------
# обновим менеджер пакетов
python -m pip install --upgrade pip
Теперь поставим несколько модулей для корректной работы линтера с длинными строками кода, встречающимися в кодах python, автоматического упорядочивания строк import и прочее...
Подробно о выгоде этой настройки можно почитать на Хабрахабр: Настройка Visual Studio Code для Django
Я же приведу лишь краткую последовательность действий.
# терминал d:\_VS_Projects\work_Wagtail_Project
-------------------------------------
# поставим пакеты, необходимые для IDE VS Code с проектом Django/Wagtail
pip install django black isort pyli

# создадим отдельный requirements_for_VSCode.txt 
cd wagtail_site
echo "" "# для VS Code " "black" "isort" "pyli" >> .\requirements_for_VSCode.txt 
Теперь добавим настройки модулей....
В каталоге WorkSpace (в нашем случае C:\_VS_Projects) добавим папку .vscode, в которой будут хранится настройки наших пакетов. Это можно сделать тремя способами:
а) меню Run -> Add Configuration (и любые настройки, которые позже мы заменим)
б) ctrl + shift + p -> Debug: Add Configuration (и любые настройки)
в) в терминале: mkdir .vscode (из каталога проектов (C:\_VS_Projects)
Игнорируем пока файл launch.json (его мы настроим позже).
Создадим файл settings.json в каталоге .vscode следующего содержания
# > .vscode/settings.json
-------------------------------------

// Settings for vscode
{
    "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
    
}
В корне рабочего простраства WorkSpace (рядом с каталогом .vscode) добавляю файл .isort.cfg
# терминал d:\_VS_Projects (WorkSpace)
----------------------------------------------------------------------------

# создаем файл настроек модуля isort
# и настроим на использование сортировки black
echo "[settings]" "profile=black" > .isort.cfg
Должен получиться такой файл
# файл: .isort.cfg в корне проекта (WorkSpace)
# -------------------------------------
[settings]
profile=black
Для модуля mypy также в корне проекта (WorkSpace) добавим файл настроек
# терминал d:\_VS_Projects   (WorkSpace)
----------------------------------------------------------------------------

# создаем файл настроек mypy
echo "# здесь настройки модуля mypy" > .mypy.ini
И заполним его следующим содержимым
# файл: .mypy.ini в корне проекта (WorkSpace)
# -------------------------------------

[mypy]

plugins =
 mypy_django_plugin.main

[mypy.plugins.django-stubs]
django_settings_module = "core.settings"
Непосредственно создание проекта Django/Wagtail
Если мы начинаем новый проект - то создадим его так, как описано на сайте с официальной документацией (ну или почти так...)
DjangoProject.com - Quick install guide
WagTail.org - Your first Wagtail site
Запускаем терминал (ctrl + ~), убеждаемся, что активировалось нужное виртуальное окружение.
В подкаталоге d:\_VS_Projects\work_Wagtail_Project
# терминал d:\_VS_Projects\work_Wagtail_Project
-------------------------------------

pip install django (или pip install wagtail)
mkdir wagtail_site  # (если ранее еще не создали этот каталог)


# Cоздаем django или wagtail проект

django-admin startproject core django_site
# или
wagtail start core mySite

Обращаю внимание, вместо рекомендации официального сайта
django-admin startproject mysite (wagtail start mysite mysite)
я строго рекомендую явно указывать название приложение "core" и каталог с решением "django_site". В противном случае будут созданы вложенные папки с совпадающим названием решения и приложения внутри решения, что выглядит, на мой взгляд, просто чудовищно!!!
Далее действуем по инструкции авторов фреймфорков
# терминал d:\_VS_Projects\work_Wagtail_Project
-------------------------------------

# ставим зависимости, заданные автором фреймфорка
# только для wagtail, для django такой файл еще не создан
pip install -r wagtail_site/requirements.txt    

# дополнительно еще ставим библиотеку Pillow
# обязательна для wagtail, но вскоре вы ее захотите и в django
python -m pip install --upgrade Pillow  

# добавить в requirements.txt нашу новую библиотеку
echo "" "# для картинок " "Pillow" >> .\requirements.txt


# И стандартные заклинания для запуска проекта
cd wagtail_site
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
Открываем броузер и убеждаемся, что работает сайт на адресе
http://127.0.0.1:8000/ и панель администрирования на http://127.0.0.1:8000/admin
Настройка автозапуска и отладки по F5
для возможности отладки по F5 создадим конфигурацию автозапуска. Для этого, как уже ранее описывалось, используем либо
меню Run -> Add Configuration (и любые настройки, которые позже мы заменим), либо
ctrl + shift + p -> Debug: Add Configuration (и любые настройки)
Последовательно укажем необходимость работать по шаблону Python, Django и укажем путь к библиотеке manage.py
Получится такой файл:
# файл .vscode\launch.json
-------------------------------------

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Django",
            "type": "python",
            "request": "launch",
            "program": "${workspaceFolder}\\work_Wagtail_Project\\wagtail_site\\manage.py",
            "args": [
                "runserver"
            ],
            "django": true,
            "justMyCode": true
        },
    ]
}
И уже можно бы и запускать, проект будет работать, но в процессе запуска можно будет увидеть следующую ошибку:
ModuleNotFoundError: No module named 'debugpy'
Решение довольно простое
# терминал d:\_VS_Projects\work_Wagtail_Project
-------------------------------------

pip install debugpy

# добавим в requirements_for_VSCode.txt библиотеку
echo "" "# для отладки VS Code " "debugpy"  >> .\wagtail_site\requirements_for_VSCode.txt 
И последний штрих!
Для тех кому лень каждый раз набирать
python manage.py <some command>
Сокращение команд PowerShell
Я себя отношу к ленивым людям, потому так подробно и удобно настраиваю рабочую среду. Не хочется тратить силы на повторяющиеся действия.
В том числе при работе с проектом django/wagtail приходится десятки раз набирать команду
python manage.py <some command>
Но можно уменьшить количество "буковок" в команде. Во первых на windows вместо слова python можно использовать сокращение py
py manage.py <some command>
А во вторых можно воспользоваться понятием функции powershell
для этого ввести в терминале такую команду
# функция PowerShell для сокращенного вызова python manage.py <Command> <Param>
# --------------------------------------------------------------------------------------------
function pmp ($param1,$param2) { 
	Write-Host "running python manage.py $param1 $param2" -ForegroundColor Yellow ;
	python manage.py $param1 $param2
}
Ее можно скопировать прямо так в многострочном варианте и вставить в powershell, а можно и переписать одной строкой
# функция PowerShell для сокращенного вызова python manage.py <Command> <Param>
# без переноса строк (одной строкой)
# --------------------------------------------------------------------------------------------
function pmp ($param1,$param2) { 	Write-Host "running python manage.py $param1 $param2" -ForegroundColor Yellow ; python manage.py $param1 $param2 }
В результате, пока эта сессия терминала открыта - в ней можно вызвать короткие команды
# примеры короткого вызова команд manage.py
# ------------------------------------------------------------------------
pmp makemigrations
pmp migrate
pmp runserver
pmp shell
Итоговая структура файлов WorkSpace
В результате, пока эта сессия терминала открыта - в ней можно вызвать короткие команды
C:\_VS_PROJECTS
│   .isort.cfg
│   .mypy.ini
│   
├─.vscode
│       launch.json
│       settings.json
│
├─test_Django3_Project
├─test_Django4_Project
├─test_Parsing_Project
└─work_Wagtail_Project
    ├───copies
    ├───data
    ├───docs
    ├───env_wagtail
    ├───sources
    └───wagtail_site
        │   .....
        │   manage.py
        │   requirements.txt
        │   requirements_for_VSCode.txt
        │
        ├───core
        ├───home
        └───search

Телеграмм: t.me/GoloseevRU

e-mail для обратной связи: Blog@Goloseev.ru

Made on
Tilda