什么是mixin
mixin模式大致来说可以看成是多继承的一种。但是使用这种多继承的时候,为了防止混乱要注意分清主次(其实这种方式的多继承采用mixin的直译理解比较好,混入,补充合作完成的意思)
使用mixin模式要注意:
首先它必须表示某一种功能,而不是某个物品,如同Java中的Runnable,Callable等
其次它必须责任单一,如果有多个功能,那就写多个Mixin类
然后,它不依赖于子类的实现
最后,子类即便没有继承这个Mixin类,也照样可以工作,就是缺少了某个功能。
mixin是多继承的一种,多继承时程序的运行顺序从左到右按顺序查找。继承链是程序运行过程中自然形成的,及时多继承里右边的类中没有需要的方法,Python也可以通过某种方式查找到左边的类中调用对应的方法
Mixin实现
view中如果觉得自带的post、get方法不够好,也可以重写post、get方法,这样就与函数式编程没有什么区别。有时需要前后端异步方式加载数据,就需要使用ajax来完成,这时就可以使用mixin来解决。
使用mixin可以为class提供额外的功能,但它自身却不能单独使用的类. 在具有多继承能力的编程语言中, mixin可以为类增加额外功能或方法. 在Django中, 我们可以使用mixin为CBVs提供更多的扩展性, 当然在类继承过程中, 我们推荐以下原则:
- Django自身提供的View永远在最右边
- mixin依次在以上view的左边
- mixin永远继承自Python的object类型
class ModelValidView(LoginRequiredMixin, AjaxResponseMixin, View):
def __init__(self, model):
self.model = model
def post_ajax(self, request, *args, **kwargs):
pass