昨天我有一个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而不是类本身来装饰实例?
答案 0 :(得分:0)
编写mixin而不是装饰器的主要原因是mixins是类,因此是可扩展的。例如,如果我想略微修改LoginRequiredMixin.handle_no_permission
的行为,那么编写一个扩展LoginRequiredMixin
的新类,覆盖handle_no_permission
并使用该修改后的类就很容易了。作为一个函数,login_required
装饰器不像定制那么简单。