2017-09-17 113 views
0

昨天我有一个Stackoverflow question about putting a permissioning check on a class-based-view。该解决方案似乎是纳入PermissionDeniedMixin。它也看起来像我可以尝试UserPassesTestMixin from Django-braces装饰类或dispatch()方法?

这是有道理的,但我做一些背景阅读的dispatch()方法和偶然发现this part of the documentation

要装饰一个基于类的视图的每个实例,你需要装饰 类定义本身。要执行此操作,请将装饰器应用于类的 dispatch()方法。

为什么我需要或选择使用权限mixins而不是类本身来装饰实例?

回答

0

编写mixin而不是装饰器的主要原因是mixin是类,因此是可扩展的。例如,如果我想稍微修改LoginRequiredMixin.handle_no_permission的行为,那么编写一个扩展LoginRequiredMixin的新类很容易,可以覆盖handle_no_permission,并改为使用该修改的类。作为一个函数,装饰器不像自定义那样简单。