首页 > 解决方案 > 如何将 CBV login_required 重定向到特定路由?

问题描述

我有一个 HomeView 类,我添加了一个 login_required,但我不知道如何使用我制作的自定义登录页面重定向它。

这是我项目中的 urls.py 和 settings.py:

我的博客\urls.py

from django.contrib import admin
from django.urls import path,include
from .settings import DEBUG, STATIC_URL, STATIC_ROOT, MEDIA_URL, MEDIA_ROOT
from django.conf.urls.static import static
# from django.conf import settings

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myblog_app.urls')),
    path('members/', include('django.contrib.auth.urls')),
    path('members/', include('members.urls')),
]
# + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

if DEBUG:
    urlpatterns += static(STATIC_URL,document_root =STATIC_ROOT )
    urlpatterns += static(MEDIA_URL,document_root = MEDIA_ROOT)

myblog_app\urls.py

from django.urls import path
from django.contrib.auth.decorators import login_required
from .views import HomeView,ArticleDetailView,AddPostView,UpdatePostView,DeletePostView,AddCategoryView,CategoryView,CategoryListView,LikeView,AddCommentView

urlpatterns = [
    path('', login_required(HomeView.as_view()),name='home'),
    path('article/<int:pk>', ArticleDetailView.as_view(),name='article-detail'),
    path('add_post/', AddPostView.as_view(),name='add_post'),
    path('article/<int:pk>/comment/', AddCommentView.as_view(),name='add_comment'),
    path('article/edit/<int:pk>', UpdatePostView.as_view(),name='update_post'),
    path('article/<int:pk>/remove', DeletePostView.as_view(),name='delete_post'),
    path('add_category/', AddCategoryView.as_view(),name='add_category'),
    path('category/<str:cats>', CategoryView,name='category'),
    path('category-list', CategoryListView,name='category_list'),
    path('like/<int:pk>', LikeView,name='like_post'),
]

成员/urls.py

from django.urls import path
from .views import UserRegisterView,UserEditView,UserLoginView,PasswordsChangeView,ShowProfilePageView,EditProfilePageView
from django.contrib.auth import views as auth_views
from . import views

urlpatterns = [
    path('login/',UserLoginView, name='login'),
    path('register/',UserRegisterView.as_view(), name='register'),
    path('edit_profile/',UserEditView.as_view(), name='edit_profile'),
    # path('password/',auth_views.PasswordChangeView.as_view(template_name='registration/change-password.html')),
    path('password/',PasswordsChangeView.as_view(template_name='registration/change-password.html')),
    path('password_success/',views.password_success,name='password_success'),
    path('<int:pk>/profile/',ShowProfilePageView.as_view(),name='show_profile_page'),
    path('<int:pk>/edit_profile_page/',EditProfilePageView.as_view(),name='edit_profile_page'),
]

设置.py

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

LOGIN_REDIRECT_URL='home'
LOGOUT_REDIRECT_URL='login'

它现在所做的是它基本上只是重定向到 path('', login_required(HomeView.as_view()),name='home')并且它不知道从哪里获取登录 url,所以它应该重定向到path('login/',UserLoginView, name='login')但我不知道该怎么做

标签: pythondjangodjango-viewsdjango-templates

解决方案


好的,我找到了答案,所以我只是添加了它,login_url='([login url path])'以便它重定向到我想要的登录 url......现在它应该看起来像这样:

path('',login_required(HomeView.as_view(),login_url='/members/login/'),name='home'),

推荐阅读