[DRF] DjangoとDRFの共存

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)),
]


Author: webmaster