Django 基于类的视图:如果已登录,则重定向,否则为渲染模板
如何以最通用的方式实现这一点?我想重写Django 基于类的视图:如果已登录,则重定向,否则为渲染模板,django,django-views,Django,Django Views,如何以最通用的方式实现这一点?我想重写get(),但是我不得不重写太多的方法。还尝试了as_view(),但我无法从那里访问请求 我还尝试在模板中添加一个,但我认为这不是最好的方法。我怀疑您是否希望将覆盖为查看,除非您正在做一些异常奇怪的事情。它返回一个用作视图的函数。它返回的函数只不过是调用dispatch from django.shortcuts import redirect from django.views.generic import TemplateView class My
get()
,但是我不得不重写太多的方法。还尝试了as_view()
,但我无法从那里访问请求
我还尝试在模板中添加一个
,但我认为这不是最好的方法。我怀疑您是否希望将覆盖为查看,除非您正在做一些异常奇怪的事情。它返回一个用作视图的函数。它返回的函数只不过是调用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)
可以重写所需的特定方法。例如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)
是学习django基于类的视图的一个很好的参考。免责声明:我创建了它。我将复制@meshy的答案,只需稍加编辑,请求。user.is\u authenticated
是一个bool,您不能调用它。在dispatch
方法中仅更改此位:
...
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated:
....
通常,对于这样的小编辑,您会对原始答案进行注释,而不会创建新答案。一旦你得到了50点声誉点,你可以感谢你指出了这一点。我现在编辑了我的答案。