Open14
DIV(Django-Inertia-Vue)
ということで、今日はInertiaを使って、DjangoとVueを繋がることを検証していきたいと思います。
環境はWSL2/Ubuntu 22.04.1
gz@zeus:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
バージョンを確認
gz@zeus:~$ python --version
Python 3.10.12
gz@zeus:~$ node --version
v18.12.1
gz@zeus:~$ npm --version
8.19.2
まず、プロジェクトフォルダとVirtualEnv環境を作成
gz@zeus:~$ cd tmp
gz@zeus:~$ mkdir test_div
gz@zeus:~$ cd test_div
gz@zeus:~$ python -m venv venv
gz@zeus:~$ venv/bin/activate
(venv) gz@zeus:~/tmp/test_div$
次、Djangoのパッケージをインストール
(venv) gz@zeus:~/tmp/test_div$ python -m pip install Django
Collecting Django
Downloading Django-4.2.4-py3-none-any.whl (8.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.0/8.0 MB 25.0 MB/s eta 0:00:00
Collecting asgiref<4,>=3.6.0
Using cached asgiref-3.7.2-py3-none-any.whl (24 kB)
Collecting sqlparse>=0.3.1
Using cached sqlparse-0.4.4-py3-none-any.whl (41 kB)
Collecting typing-extensions>=4
Using cached typing_extensions-4.7.1-py3-none-any.whl (33 kB)
Installing collected packages: typing-extensions, sqlparse, asgiref, Django
Successfully installed Django-4.2.4 asgiref-3.7.2 sqlparse-0.4.4 typing-extensions-4.7.1
バージョンを確認
(venv) gz@zeus:~/tmp/test_div$ python -m django --version
4.2.4
プロジェクトの作成
django-admin startproject test_div .
フォルダ構成はこうなります。
(venv) gz@zeus:~/tmp/test_div$ tree -L 2
.
├── manage.py
├── test_div
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── venv
├── bin
├── include
├── lib
├── lib64 -> lib
└── pyvenv.cfg
6 directories, 7 files
とりあえず、djangoの動作確認
$ python manage.py runserver
ブラウザでlocalhost:8000を開いて、以下の画面が表示されたら、OK
オフィシャルのinertia-django
を利用して繋ぐ
バックエンドの役割を果たしてくれる。ただ、フロントはdjango-vite
におすすめられている。https://github.com/MrBin99/django-vite
ステップがたくさんありますので、順番にやっていきます。
まず、バックエンド
inertia-django
のインストール
(venv) gz@zeus:~/tmp/test_div$ pip install inertia-django
Collecting inertia-django
Using cached inertia_django-0.5.2-py3-none-any.whl (16 kB)
Requirement already satisfied: django<5.0,>=4.0 in ./venv/lib/python3.10/site-packages (from inertia-django) (4.2.4)
Collecting requests<3,>=2
Using cached requests-2.31.0-py3-none-any.whl (62 kB)
Requirement already satisfied: sqlparse>=0.3.1 in ./venv/lib/python3.10/site-packages (from django<5.0,>=4.0->inertia-django) (0.4.4)
Requirement already satisfied: asgiref<4,>=3.6.0 in ./venv/lib/python3.10/site-packages (from django<5.0,>=4.0->inertia-django) (3.7.2)
Collecting certifi>=2017.4.17
Using cached certifi-2023.7.22-py3-none-any.whl (158 kB)
Collecting urllib3<3,>=1.21.1
Using cached urllib3-2.0.4-py3-none-any.whl (123 kB)
Collecting idna<4,>=2.5
Using cached idna-3.4-py3-none-any.whl (61 kB)
Collecting charset-normalizer<4,>=2
Using cached charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (201 kB)
Requirement already satisfied: typing-extensions>=4 in ./venv/lib/python3.10/site-packages (from asgiref<4,>=3.6.0->django<5.0,>=4.0->inertia-django) (4.7.1)
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests, inertia-django
Successfully installed certifi-2023.7.22 charset-normalizer-3.2.0 idna-3.4 inertia-django-0.5.2 requests-2.31.0 urllib3-2.0.4
設定を諸々入れてきます。
settings.pyのINSTALLED_APPSにinertiaを追加
INSTALLED_APPS = [
# django apps,
'inertia',
# your project's apps,
]
InertiaのMiddlewareも追加
MIDDLEWARE = [
# django middleware,
'inertia.middleware.InertiaMiddleware',
# your project's middleware,
]
my_appを作成
python manage.py startapp test_app
index.htmlの作成
mkdir test_app/templates -p
touch test_app/templates/index.html
中身:
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible"
content="IE=edge" />
<meta name="viewport"
content="width=device-width, initial-scale=1.0" />
<title>Layout Template</title>
</head>
<body>
{% block inertia %}{% endblock %}
</body>
</html>
レイアウトテンプレート(INERTIA_LAYOUT)の設定
INERTIA_LAYOUT = BASE_DIR / "test_app" / "templates/index.html"
これでバックエンドの設定が終わりました。
次、フロントの設定を行きます。
まず、dajngo-viteのインストール
(venv) gz@zeus:~/tmp/test_div$ pip install django-vite
Collecting django-vite
Downloading django_vite-2.1.3-py3-none-any.whl (13 kB)
Requirement already satisfied: Django>=1.11 in ./venv/lib/python3.10/site-packages (from django-vite) (4.2.4)
Requirement already satisfied: asgiref<4,>=3.6.0 in ./venv/lib/python3.10/site-packages (from Django>=1.11->django-vite) (3.7.2)
Requirement already satisfied: sqlparse>=0.3.1 in ./venv/lib/python3.10/site-packages (from Django>=1.11->django-vite) (0.4.4)
Requirement already satisfied: typing-extensions>=4 in ./venv/lib/python3.10/site-packages (from asgiref<4,>=3.6.0->Django>=1.11->django-vite) (4.7.1)
Installing collected packages: django-vite
Successfully installed django-vite-2.1.3
settings.pyのINSTALLED_APPSにdjango_viteを追加
INSTALLED_APPS = [
...
'django_vite',
...
]