首页 > 解决方案 > Django djoser 有两个相同的 url

问题描述

我正在阅读有关 Django 的 Djoser 框架。

我发现有两个 url 模式要包含,它们都是相同的:

urlpatterns = [
    (...),
    url(r'^auth/', include('djoser.urls')),
    url(r'^auth/', include('djoser.urls.jwt')),
]

我以为 Django 总是拿第一场比赛

怎么可能选择第二条路径?

标签: djangourldjango-authenticationdjoser

解决方案


您提供的 urlpatterns 是:

urlpatterns = [
    (...),
    url(r'^auth/', include('djoser.urls')),
    url(r'^auth/', include('djoser.urls.jwt')),
]

从函数的使用include可以看出,这些模式只是包含了其他模式。请参阅包括其他 URLconfs [Django 文档]

如果我们查看来自'djoser.urls'(GitHub)的 url,它们基本上看起来像:

router = DefaultRouter()
router.register("users", views.UserViewSet)

User = get_user_model()

urlpatterns = router.urls

所以基本上使用includethis 最终会生成一堆看起来像的 url 模式auth/users/...

转到'djoser.urls.jwt'(GitHub)中的模式:

urlpatterns = [
    re_path(r"^jwt/create/?", views.TokenObtainPairView.as_view(), name="jwt-create"),
    re_path(r"^jwt/refresh/?", views.TokenRefreshView.as_view(), name="jwt-refresh"),
    re_path(r"^jwt/verify/?", views.TokenVerifyView.as_view(), name="jwt-verify"),
]

基本上以auth/jwt/create等结尾。

从这个角度来看,模式显然不同,因此无需担心。


推荐阅读