zoukankan      html  css  js  c++  java
  • Python 的 Mixin 类(转)

    转1:https://www.cnblogs.com/aademeng/articles/7262520.html

    转2:https://blog.csdn.net/u010377372/article/details/70256043

    转3:https://blog.csdn.net/u012814856/article/details/81355935

    另一个廖雪峰官网:https://www.liaoxuefeng.com/wiki/1016959663602400/1017502939956896

    其实很好理解,就是多重继承,只是不把mixin类看成父类(实际上是父类),而是看成是新增一个功能,用mixin结尾的类名命名是为了区分真正的父类。

    可以参考一下Django的LoginRequiredMixin的实现:

    class LoginRequiredMixin(AccessMixin):
        """Verify that the current user is authenticated."""
        def dispatch(self, request, *args, **kwargs):
            if not request.user.is_authenticated:
                return self.handle_no_permission()
            return super().dispatch(request, *args, **kwargs)

    这个类重写了View类的dispatch方法,当某个类继承LoginRequiredMixin和View时,由于LoginRequiredMixin在View左边,所以当url路由完成,在UserInfoView找dispatch方法时,将优先调用LoginRequiredMixin的dispatch方法

    UserInfoView(LoginRequiredMixin, View):
        pass

    在LoginRequiredMixin的dispatch方法中,先进行认证处理,认证通过,则返回View的dispatch方法(注意上面的super不是指的LoginRequiredMixin的父类,而是UserInfoView的父类),一切照常运行,若认证不通过,则返回handle_no_permission()。其实这相当于实现了一个函数装饰器功能,这可能就是mixin的含义(混入)。

  • 相关阅读:
    layui使用iconfont
    MySQL&MyBatis 时间处理的配合
    Jira客户端
    同级div设置display:inline-block,父级div强制不换行
    Spring RestController 请求参数详解
    Mybatis映射文件
    Redis分布式锁
    Netty1
    Maven工程打成一个jar包
    Maven 工程读取resource下的文件
  • 原文地址:https://www.cnblogs.com/olivertian/p/10991593.html
Copyright © 2011-2022 走看看