django - 在中间件而不是视图中测试is_authenticated()

时间:2012-05-18 22:34:41

标签: django

我的大部分观点都需要登录。有没有办法在继续之前指定所有视图或视图子集必须具有用户is_authenticated()= True。如果没有,用户将被重定向到登录页面?

2 个答案:

答案 0 :(得分:2)

https://docs.djangoproject.com/en/1.4/topics/auth/#the-login-required-decorator

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

答案 1 :(得分:1)

如果您愿意,您必须遵守一些规则,

  • request.user设置在AuthenticationMiddleware上,因此在此之前放置自定义中间件会失败。
  • 您只能使用process_view方法,该方法在您的视图被调用之前执行

但是,不知何故;您必须制作一种类似登录免费视图的列表,但这不太可能,因为每次创建新视图时检查列表可能都有问题。另一方面,login_required装饰工作就像这样,它更容易使用......所以你必须在做这样的事情之前三思而后行,并考虑你是否真的需要这样的东西

以下是doc for Custom Middlewares,这里的django defalut middleware classes非常重要,因为middelware类的顺序非常重要。