Django中间件进程\视图获取视图类?

Django中间件进程\视图获取视图类?,django,middleware,Django,Middleware,我使用的是基于类的视图,我想创建一个中间件,在某些情况下重定向到其他地方 我尝试过使用process\u request(),但我需要添加排除以避免循环 我的实验是排除基本视图类的视图,但是process\u view()获取视图函数,看,似乎我无法从中获取视图类,我在这里要求验证这是真的还是有更好的方法?默认情况下,确实无法获取实际的视图类。但是,您可以按如下方式覆盖as_view方法: class ViewClassMixin(object): @class_method d

我使用的是基于类的视图,我想创建一个中间件,在某些情况下重定向到其他地方

我尝试过使用
process\u request()
,但我需要添加排除以避免循环


我的实验是排除基本视图类的视图,但是
process\u view()
获取视图函数,看,似乎我无法从中获取视图类,我在这里要求验证这是真的还是有更好的方法?

默认情况下,确实无法获取实际的视图类。但是,您可以按如下方式覆盖
as_view
方法:

class ViewClassMixin(object):
    @class_method
    def as_view(cls, **initkwargs):
        view = super(ViewClassMixin, cls).as_view(**initkwargs)
        view.cls = cls
        return view
积分归django rest框架所有,该框架在其应用程序中使用此方法

然后,视图类可以作为实际视图函数上的
cls
属性访问


更新:1.9将向Django自己的基于类的视图添加相同的行为。
view.as\u view()
返回的view函数将具有
view\u class
属性

有点超出我的问题范围:

我没有排除基本视图类的视图,而是选择了类似
login\u required

def skip_user_status_sync(view_func):
    """ marks the view function to skip sync middleware """
    view_func.skip_user_status_sync = True
    return view_func
在URL中,如
login\u required

url(r'^logout/$', skip_user_status_sync(views.Logout.as_view()), name='logout'),
然后在中间件中检查该函数属性:

class UserStatusSyncMiddleware(object):
    def process_view(self, request, view_func, *view_args, **view_kwargs):
        if hasattr(view_func, 'skip_user_status_sync'):
            return None

这也是我所拥有的,我正在把它变成一个装饰者,就像
login\u required