我有一个管理 mixin,用于防止缓存并确保用户通过覆盖 dispatch() 登录。它正在我的基于类的视图中使用。
# mixins.py
from django.contrib.admin.views.decorators import staff_member_required
from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache
class AdminPageMixin(object):
@method_decorator(never_cache)
@method_decorator(staff_member_required)
def dispatch(self, request, *args, **kwargs):
return super(AdminPageMixin, self).dispatch(request, *args, **kwargs)
# views.py
class SomeAdminView(AdminPageMixin, ListView):
当我尝试针对 SomeAdminView 运行单元测试时遇到了问题。是的,我知道我可以使用 django 的测试客户端登录,但我试图远离编写功能测试。相反,我想将 AdminPageMixin 功能包装到单个装饰器中并在 urls.py 中调用该装饰器,如下所示:
url(r'^myurl/$', decorator_wrapper(SomeAdminView.as_view()), name='some-admin-view'),
或者,我可以这样做:
url(r'^myurl/$', never_cache(staff_member_required(SomeAdminView.as_view())), name='some-admin-view'),
但是如果我想添加第三个或第四个装饰器,我会更新 urls.py 中的很多行并重复很多代码。
任何想法如何创建这个装饰器包装器?