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