在 Django 中有没有办法让上下文处理器只用于某些视图?

In Django is there a way to have context processors for only certain views?

我只想让某些视图通过处理器。例如,对于大约一半的观点,我想 运行 自定义身份验证方法。如果用户未通过身份验证,它将把他们重定向到一个新页面。在 Django 中执行此类操作的好方法是什么?

上下文处理器不是您需要的。上下文处理器(顾名思义)在渲染模板时注入额外的上下文。

您想要的是在视图运行之前重定向(因此在呈现任何模板之前)。

这可以通过 middleware 实现,但中间件更有用,可以应用于 所有 您的视图。

在你的情况下,你应该写 a decorator, and decorate those views with it. Specifically, you probably want to use 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