zoukankan      html  css  js  c++  java
  • Django CBV源码分析

    django版本:2.2.22
    
    # 你自己不要修改源码  出了bug很难搞
    
    # 突破口urls.py
    url(r'^login/',views.MyLogin.as_view())
    """
    函数名/方法名 加括号执行优先级最高
    猜测
        as_view()
            要么是被@staticmethon修饰的静态方法
            要么是被@classmethod修饰的类方法  正确
            
        @classonlymethod
        def as_view(cls, **initkwargs):
            pass
    """
    
        @classonlymethod
        def as_view(cls, **initkwargs):
            """
            cls就是我们自己写的类  MyCBV
            Main entry point for a request-response process.
            """
            def view(request, *args, **kwargs):
                self = cls(**initkwargs)  # cls是我们自己写的类
                # self = MyLogin(**initkwargs)  产生一个我们自己写的类的对象
                
                return self.dispatch(request, *args, **kwargs)
                
                """
                以后你们会经常看源码 但是在看python源码的时候 一定要时刻提醒自己面向对象方法查找顺序
                    先从对象自己找
                    再去产生对象的类里面找
                    之后再去父类里面找
                """
                """
                总结:看源码只要看到了self点一个东西 一定要问你自己当前这个self到底是谁
                """
            return view
        
        # CBV的精髓
        def dispatch(self, request, *args, **kwargs):
            # 获取当前请求的小写格式 然后对比当前请求方式是否合法
            # get请求为例
            # post请求
            if request.method.lower() in self.http_method_names:
                handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
                """
                反射:通过字符串来操作对象的属性或方法
                    handler = getattr(自己写的类产生的对象,'get',当找不到get属性或者方法的时候就会用第三个参数)
                    handler = 我们自己写的类里面的get方法
                """
            else:
                handler = self.http_method_not_allowed
            return handler(request, *args, **kwargs)
            """
            自动调用get方法
            """
            
    # 要求:掌握到不看源码也能够描述出CBV的内部执行流程(******)

    图解

  • 相关阅读:
    和阿文一起学H5-文字云制作
    uml与数据库设计
    设计模式——面向对象设计原则
    koajs框架解决的问题
    mongodb
    javascript 获取select选中text,2种方法
    带参数跳转
    express表单提交和参数接收4种方式
    ejs模版的4种输出方式
    nodejs事件
  • 原文地址:https://www.cnblogs.com/ZhZhang12138/p/14897085.html
Copyright © 2011-2022 走看看