在Django中有没有办法只为某些视图设置上下文处理器?

时间:2015-02-06 20:37:16

标签: python django authentication

我只希望某些视图通过处理器。例如,对于大约一半的视图,我想运行自定义身份验证方法。如果用户未经过身份验证,则会将其重定向到新页面。什么是在Django中做这样的事情的好方法?

1 个答案:

答案 0 :(得分:4)

上下文处理器不是您需要的。上下文处理器(如其名称所暗示)在呈现模板时注入额外的上下文。

你想要的是在视图甚至运行之前重定向(因此在渲染任何模板之前)。

这可以通过middleware来实现,但中间件对于应用所有您的观点更有用。

在您的情况下,您应该编写a decorator,并使用它来装饰这些视图。具体来说,您可能希望使用user_passes_test

from django.contrib.auth.decorators import user_passes_test

def my_auth_check(user):
    # Do something
    if all_good(user):
        return True
    return False

@user_passes_test(my_auth_check)
def my_view(request):
    # stuff

@user_passes_test(my_auth_check)
def my_other_view(request):
    # stuff