Django REST Frameworkのサンプルプロジェクト
- カスタムUserクラスの導入
- サンプルモデルの追加
- Simple JWTによるトークン認証の導入
- pytest-djangoの導入
- django-filterの導入
- django-configurationsの導入
- 自動ドキュメント生成 (drf-spectacular)
- DevContainerの導入
- デプロイ用Docker環境 (django + gunicorn + nginx)
- Makefile整備
- flake8などの整備
APIドキュメント (/api/schema/redoc) を参考にしてください
/api/token
に次の内容をPOST
{
"email": "[email protected]",
"password": "passpass"
}
こんな感じのレスポンスが帰ってくる
{
"access":"access token",
"refresh":"refresh token"
}
アクセストークンはインメモリで保存,リフレッシュトークンはLocalStorageなどに保存 (LocalStorageへの保存はセキュリティ的にやばいけど...)
/api/token/refresh
に次の内容をPOST
{
"refresh": "refresh token"
}
こんな感じのレスポンスが帰ってくる
{
"access":"access token",
"refresh":"refresh token"
}
古いリフレッシュトークンを無効化する運用も可能(だけどやってない)
Authorization
ヘッダにBearer <access token>
をつける
プロジェクトルートに.env
を作成
DJANGO_SECRET_KEY=<任意のキー>
DJANGO_PAGINATION_LIMIT=<int>
POSTGRES_DB=DB名
POSTGRES_USER=DBユーザー
POSTGRES_PASSWORD=DBパスワード
POSTGRES_HOST=db
POSTGRES_PORT=5432
COMPOSE_PROJECT_NAME=drf-example-dev # DevContainerが開発用コンテナを開くようにするための設定
make build
を実行- devContainerを開く
macOSがホストの時にPermission Deniedと表示された場合は権限を見直すと良いかもしれない
参考: macos - open /Users/[user]/.docker/buildx/current: permission denied on macbook? - Stack Overflow
django通常のテストではなくpytestを使っています.pytest
で実行できます
- 今のところ
django=4.1.9
,djangorestframework=3.14.0
- DRF
3.15.0
がリリースされたらdjango4.2
(LTS)をインストールできそう
- devcontainer上でrunserverすると
127.0.0.1:8000
でアクセス可能 - macからwebコンテナにアクセスしてrunserverすると
127.0.0.1:8000
でアクセスできないrunserver 0.0.0.0:8000
で立ち上げる必要がある