装饰类或dispatch()方法?

时间:2017-09-17 02:06:14

标签: django

昨天我有一个Stackoverflow question about putting a permissioning check on a class-based-view。该解决方案似乎包含PermissionDeniedMixin。看起来我也可以尝试UserPassesTestMixin from Django-braces

这是有道理的,但我正在对dispatch()方法进行一些背景阅读,并偶然发现this part of the documentation

  

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

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

1 个答案:

答案 0 :(得分:0)

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