首页 文章

登录前后,我想使用相同的URL,但使用不同的基于类的视图

提问于
浏览
-1

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

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

urls.py

from django.contrib.auth import views as auth_views

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

views.py

from django.views.generic import ListView

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

1 回答

  • 0

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

    在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'
    

相关问题