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

Alx*_*lxe 2 django django-views

我怎样才能以最通用的方式实现这一目标?我想到了重写get(),但我必须覆盖太多的方法.也试过as_view()但我无法从那里访问请求.

我也尝试<meta http-equiv="refresh" content="0;url" />在模板中添加一个,但我认为这不是最好的方法.

mes*_*shy 12

我怀疑你想要覆盖,as_view除非你做了奇怪的事情.它返回一个用作视图的函数.它返回的函数是(或多或少)dispatch.

您可以覆盖所需的特定方法.例如get,或者,如果要覆盖所有的方法(get,post等),你应该重写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)
Run Code Online (Sandbox Code Playgroud)

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