python - 如何将 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')
但我不知道该怎么做
解决方案
好的,我找到了答案,所以我只是添加了它,login_url='([login url path])'
以便它重定向到我想要的登录 url......现在它应该看起来像这样:
path('',login_required(HomeView.as_view(),login_url='/members/login/'),name='home'),
推荐阅读
- python - 处理正则表达式python中的冲突
- javascript - 在 Observables 中继续下一步之前如何取消或取消订阅?
- list - 列表中求和的方案迭代
- javascript - 在渲染子元素之前加载数据 React
- r - ISO 是让函数接受提供的参数、列表中的参数和默认值的混合的好方法
- python - 使用 Heroku/Flask Server 部署网站时出错
- optaplanner - Optaplanner - 软评分规则未按预期工作
- python-2.7 - 如何使用 itertuples() 获取找到值的第一行
- node.js - 一次处理来自多个路由的 POST 请求
- python - Django:查询数据库以获取每种类型的最新记录