【发布时间】:2017-03-22 17:13:55
【问题描述】:
我想在主 urls.py 文件中保留带有应用名称的 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),
]
例如,我将accounts.urls 包含以下内容:
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 映射建议其他模式(最佳实践)。
【问题讨论】:
标签: python django django-rest-framework