首页 > 解决方案 > 登录前后,我想使用相同的 URL,但使用不同的基于类的视图

问题描述

在用户登录之前和之后,许多网站的 URL 都没有改变。我应该如何在 Django 中实现这个?例如 http://example.com(显示登录页面)→登录→ http ://example.com (显示内容列表)

我想为登录页面(auth_views.LoginView)使用基于类的视图,然后在用户登录后,使用通用列表视图和不同的模板。

网址.py

from django.contrib.auth import views as auth_views

urlpatterns = [
path('', auth_views.LoginView.as_view(template_name='index.html'), name='index'),

视图.py

from django.views.generic import ListView

class UserIndexView(ListView):
    model = mymodel
    template_name = 'user_index.html'

标签: pythondjango

解决方案


每个 URL 只能由一个视图提供服务。在同一个视图上处理多个操作(显示索引页面和处理登录)会使其更加复杂。

在 Django 中,通常的方法是使用单独的 URL 进行登录。

urlpatterns = [
    path('', UserIndexView.as_view(), name='index',
    path('login/', auth_views.LoginView.as_view(), name='login'),
]

然后,您可以使用LoginRequiredMixin. 匿名用户将从主页重定向到登录页面,然后在登录后重定向回主页。

from django.contrib.auth.mixins import LoginRequiredMixin

from django.views.generic import ListView

class UserIndexView(LoginRequiredMixin, ListView):
    model = mymodel
    template_name = 'user_index.html'

推荐阅读