0
メインのurls.pyファイルにURLの接頭辞をアプリ名で保存します。このようにして、同じプロジェクトの下にある他のアプリでのエンドポイントの衝突を回避します。例えば、私は以下の内容を含むaccounts.urls
いDjango RESTのURLがパターンと一致しません
# project/urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/v1/accounts/', include('account.urls')),
url(r'^api/v1/users/', include('users.urls')),
url(r'^api/v1/transactions/', include('transactions.urls')),
url(r'^auth-token-auth', views.obtain_auth_token),
]
:
urlpatterns = [
url(r'^', AccountListView.as_view()),
url(r'^(?P<pk>[0-9]+)/$', AccountDetailView.as_view()),
]
このようにすることで/api/v1/accounts/1
パターンがAccountDetailView
と一致していません。それは常に最初のビューを返しますAccountListView
私がurlpatterns
の定義を以下の方法で変更すると、最も興味深いことがあります。すべてのエンドポイントが期待通りに機能します。
# project/urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/v1/', include('account.urls')),
url(r'^api/v1/', include('users.urls')),
url(r'^api/v1/', include('transactions.urls')),
url(r'^auth-token-auth', views.obtain_auth_token),
]
# account/urls.py
urlpatterns = [
url(r'^accounts/$', AccountListView.as_view()),
url(r'^accounts/(?P<pk>[0-9]+)/$', AccountDetailView.as_view()),
]
質問がメインurls.py.にapi/v1/[app_name]
アプリ名を保つことによって、この問題を解決する方法でありますおそらく、URLマッピングのための他のパターン(ベストプラクティス)を提案することができます。
はい、正しくあります:) – emvein