Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Django类的视图-如果用户经过身份验证,则为ListView;如果用户未通过身份验证,则为FormView;相同的URL_Django_Django Class Based Views - Fatal编程技术网

基于Django类的视图-如果用户经过身份验证,则为ListView;如果用户未通过身份验证,则为FormView;相同的URL

基于Django类的视图-如果用户经过身份验证,则为ListView;如果用户未通过身份验证,则为FormView;相同的URL,django,django-class-based-views,Django,Django Class Based Views,当访问者注销并访问我的主页时,我希望他们看到一份注册表。当用户登录时,他们将被重定向回主页,但它将显示类似listview的视图 实现这一点的最佳方法是同时对ListView和FormView进行子类化,并重写获得所需行为所需的每个方法吗?还是有更好的办法?检查每个方法中是否对用户进行了身份验证似乎不像Django方法那样。希望有一个聪明的设计模式来实现这一点,我不知道 class HomepageView(ListView, FormView): def get_template_n

当访问者注销并访问我的主页时,我希望他们看到一份注册表。当用户登录时,他们将被重定向回主页,但它将显示类似listview的视图

实现这一点的最佳方法是同时对
ListView
FormView
进行子类化,并重写获得所需行为所需的每个方法吗?还是有更好的办法?检查每个方法中是否对用户进行了身份验证似乎不像Django方法那样。希望有一个聪明的设计模式来实现这一点,我不知道

class HomepageView(ListView, FormView):

    def get_template_names(self):
        if self.request.user.is_authenticated:
            return ['homepage/loggedin_index.html']
        else:
            return ['homepage/loggedout_index.html']

    def get_context_data(self, **kwargs):
        if self.request.user.is_authenticated:
            ...
        else:
            ...

    def ... and so on
我的必备要求是登录和注销用户的URL必须解析为根URL,因为它是主页

from django.urls import path
from .views import HomepageView

app_name = 'homepage'
urlpatterns = [
    path('', HomepageView.as_view(), name='index'),
]

还有一个CreateListView,可以执行您想要的操作。然后,您可以将其
表单
更改为您想要的表单