Djangoでアプリケーションを作りつつ、一部はDRFのAPIを使う時の設定方法です。
Djangoプロジェクトの urls.py
Djangoプロジェクトのurls.pyがルーティングの基本になります。DjangoとDRFの共存時には以下の3つのURLパターンを登録します。
- DjangoのAdmin
- Djangoのアプリ
- DRFのアプリ
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
# Django AdminのURL設定
path('admin/', admin.site.urls),
# DjangoアプリのURL設定を含める
path('[Djangoアプリ名]/', include('[Djangoアプリ名].urls')),
# DRFのAPIエンドポイントのURL設定を含める
path('api/', include('[DRFアプリ名].api.urls')),
]
Djangoプロジェクトのurls.pyには各アプリのurls.pyを設定します。プロジェクトが大きくなっても各アプリのurls.pyの中にそのアプリで使うURLが記載されるのでわかりやすいです。
DjangoとDRFのプロジェクトを共存されるときは、Djangoのアプリ「dg_app名」、DRF
のアプリ「api_app名」のようにしておくと一目でわかるので便利です。
Django Rest Framework
from django.urls import path
from . import views
urlpatterns = [
# APIエンドポイント
path('items/', views.ItemListView.as_view(), name='item-list'),
path('items/<int:pk>/', views.ItemDetailView.as_view(), name='item-detail'),
]
<int:pk>はページ番号などの連番が入ることを意味しています。
DRFにはurlpatternsとrouter.register()の2つの方法があります。router.register()はCRUD操作に関連するURLをまとめて生成できます。登録・変更・削除などが必要な場合はrouter.register()を使い、表示だけ、または独自に複雑なURLを作る場合などは urlpatterns を使うと良いでしょう。
from rest_framework.routers import DefaultRouter
from .views import ItemViewSet
router = DefaultRouter()
router.register(r'items', ItemViewSet)
urlpatterns = [
# router.urlsをurlpatternsに含める
path('api/', include(router.urls)),
]