Django 中带有排除项的自定义中间件

Custom Middleware in Django with Exclusions

我要求在执行某些视图时通过令牌检查身份验证,而某些视图无需身份验证即可访问。 那么,我如何制作一个中间件并从中排除一些观点。 任何其他解决此问题的想法都表示赞赏。

我建议从 Django 提供的csrf middleware中汲取灵感

from django.utils.deprecation import MiddlewareMixin

class MyAuthenticationMiddleware(MiddlewareMixin):

    def process_view(self, request, callback, callback_args, callback_kwargs):

        if getattr(callback, 'my_exempt_flag', False):
            return None

        # Authentication goes here
        # Return None if authentication was successful
        # Return a HttpResponse with some error status if not successful

并创建一个装饰器来包装您的视图

from functools import wraps

def exempt_from_my_authentication_middleware(view_func):
    def wrapped_view(*args, **kwargs):
        return view_func(*args, **kwargs)
    wrapped_view.my_exempt_flag = True
    return wraps(view_func)(wrapped_view)

可以这么用

@exempt_from_my_authentication_middleware
def my_view(request):
    # TODO