Tech Blog

Django REST framework で JWT

Requirements

今回の環境

Python 3 & PostgreSQL

TL;DR

  1. 依存パッケージ追加

psycopg2

pip install --user psycopg2

Django

python -m pip install --user Django
python -m django --version
3.2.9

Django REST framework

pip install --user djangorestframework PyYAML>=5.1 uritemplate>=3.0.0 Markdown>=3.0.0

Simple JWT

pip install --user djangorestframework-simplejwt
  1. プロジェクトセットアップ

mysite プロジェクト作成

django-admin startproject mysite .

プロジェクト設定

  # ./mysite/settings.py
  # Application definition

  INSTALLED_APPS = [
     ...
+    'rest_framework',
+    'rest_framework_simplejwt',
  ]

  # Database

  DATABASES = {
      'default': {
-         'ENGINE': 'django.db.backends.sqlite3',
-         'NAME': BASE_DIR / 'db.sqlite3',
+         'ENGINE': 'django.db.backends.postgresql',
+         'NAME': 'postgres',
+         'USER': 'postgres',
+         'PASSWORD': 'postgres',
+         'HOST': 'db',
      }
  }

  # REST framework

+ REST_FRAMEWORK = {
      ...
+     'DEFAULT_AUTHENTICATION_CLASSES': (
         ...
+         'rest_framework_simplejwt.authentication.JWTTokenUserAuthentication',
+     )
+ }

urls 設定

  # ./mysite/urls.py
- from django.contrib import admin
  from django.urls import path
+ from rest_framework_simplejwt.views import (
+     TokenObtainPairView,
+     TokenRefreshView,
+ )

  urlpatterns = [
-     path('admin/', admin.site.urls),
+     path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
+     path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
  ]

migrate 実行

./manage.py migrate
  1. OpenAPI 仕様の生成
./manage.py generateschema --file openapi-schema.yml
  1. デバッグ

ユーザーの作成

./manage.py createsuperuser --username=joe --email=joe@example.com
Password:
Password (again):

開発用サーバーを起動

./manage.py runserver

Insomnia に ./openapi-schema.yml をインポートして実行

Insomnia

  1. 依存パッケージ更新
python -m pip freeze > requirements.txt

参考にしたページ