基于类的视图:如果登录则重定向,否则渲染模板

时间:2014-05-28 21:59:46

标签: django django-views

如何以最通用的方式实现这一目标?我想到了覆盖get(),但我必须覆盖太多的方法。还尝试使用as_view(),但我无法从那里访问请求。

我还尝试在模板中添加<meta http-equiv="refresh" content="0;url" />,但我认为这不是最佳方法。

2 个答案:

答案 0 :(得分:10)

我怀疑你想要覆盖as_view,除非你做的事奇怪。它返回一个用作视图的函数。它返回的函数只是调用dispatch

您可以覆盖所需的特定方法。例如get,或者,如果要覆盖所有方法(getpost等),则应覆盖dispatch

from django.shortcuts import redirect
from django.views.generic import TemplateView


class MyView(TemplateView):
    template_name = 'my_app/my_template.html'

    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated():
            return redirect('my-other-view')
        return super(MyView, self).dispatch(request, *args, **kwargs)

CCBV.co.uk是学习django基于类的视图的一个很好的参考。 免责声明:我构建了它。

答案 1 :(得分:0)

我将稍作修改以复制@meshy的答案,request.user.is_authenticated是一个布尔值,您不能调用它。只需在dispatch方法中更改此位:

...

def dispatch(self, request, *args, **kwargs):
    if request.user.is_authenticated:
        ....