【问题标题】:How to route specific urls in a django app?如何在 django 应用程序中路由特定的 url?
【发布时间】:2021-03-26 18:30:30
【问题描述】:

我想知道是否有办法在我的 Django urls.py 中只包含特定的 url 端点。

假设我有一个名为 auth 的应用,其中包含 auth/urls.py

urlpatterns = [
    url(r'^password/reset/$', PasswordResetView.as_view(),
        name='rest_password_reset'),
    url(r'^password/reset/confirm/$', PasswordResetConfirmView.as_view(),
        name='rest_password_reset_confirm'),
    url(r'^login/$', LoginView.as_view(), name='rest_login'),
    url(r'^logout/$', LogoutView.as_view(), name='rest_logout'),
    url(r'^user/$', UserDetailsView.as_view(), name='rest_user_details'),
    url(r'^password/change/$', PasswordChangeView.as_view(),
        name='rest_password_change'),
]

现在我有一个这样的 urls.py:

urlpatterns = [
    path('/', include('dj_rest_auth.urls'))
]

这包括来自 auth/urls.py 的所有端点。

有没有办法选择(在 urls.py 中)要包含的 URL?假设我只想在我的 urls.py 中包含登录和注销。

urlpatterns = [
    path('/', include('dj_rest_auth.urls.rest_login')),
    path('/', include('dj_rest_auth.urls.rest_logout'))
]

类似的东西,我怎样才能让它工作?

【问题讨论】:

  • 你为什么想要那个?会不会是“隐藏”一些网址?在这种情况下,例如,看看 auth 装饰器。我相信不可能使用 Django 的 include 来仅包含部分 URL,我从它的描述 here 中得出这一点。
  • 没错,就是隐藏一些网址。由于应用程序是导入的,我不想修改它。我只是想隐藏不需要的网址。我会看看 auth 装饰器,谢谢。
  • 不错。 “我不想修改它”是多少?装饰器可以根据条件(通常是登录状态)重定向到另一个页面,实现它就像在相应的路由函数/方法实现之前添加一行一样简单。

标签: python django


【解决方案1】:

我很久以前就这样做了。

# inside view.py just create your own custom view

# rest and rest_auth import
from rest_auth.views import LoginView, LogoutView


class CustomLogoutView(LogoutView):
    # yes u can keep it blank.
    # over-riding just to distinguish from library views.
    pass

然后在任何应用程序的 urls.py 中导入所需的视图,然后将其传递到路径中。 这样只会暴露需要的url。

from .views import CustomLoginView

urlpatterns = [
    path('login/', CustomLoginView.as_view(), name='login'),
]

您还可以直接导入库中包含的视图(不是 url)。然后从中创建 url(路径)。

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2018-05-03
    • 2012-11-10
    • 2010-09-12
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多