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

    # 你自己不要修改源码  出了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的内部执行流程(******)
  • 相关阅读:
    jenkins安装
    HTTP协议客户端是如何向服务器发送请求
    接口概念
    fiddler导出har格式转化成yml格式

    双硬盘双系统装错了记录
    chrome的版本和driver版本对应表
    monkey详解
    adb命令熟悉
    cookie、session、token
  • 原文地址:https://www.cnblogs.com/ZhZhang12138/p/14875429.html
Copyright © 2011-2022 走看看