Django day24 源码分析

一:cbv的源码分析 

    1、CBV和FBV的区别:

      - Class Base View   CBV(基于类的视图)
      - Function Base View   FBV(基于函数的视图)

    2、as_view与view的区别:

      - def as_view: 类的方法
      - def view:类方法内部,闭包函数定义:内层函数包含对外部作用域的引用

-def view(request,*args,**kwargs):
        self = cls(**initkwargs)
        if hasattr(self,'get') and not hasattr(self,'head'):
            self.head = self.get
        self.request = request
        self.args =args
        self.kwargs = kwargs
        # 不管一堆操作,最重要的还是这句话:执行dispatch方法
        # 是谁的dispatch方法?写的cbv的那个c,视图中的那个视图类
        # 这个类如果没有写dispatch,会执行View中的dispatch方法
        return self.dispatch(request,*args,**kwargs)

    3、python中一切皆对象:函数也是对象


    4、hasattr(self,'get')  -- 判断self类中是不是有该(get)方法


    5、反射 setattr(self,get,get_all):相当于把get函数,变成了get_all
      # 如果不写get方法,请求过来是,就会告诉你,这个方法不被允许
      getattr(self,'get'):拿到get函数的内存地址

-def dispatch(self,request,*args,**kwargs):
        # request.method 前台请求的方法,转成了小写
        # http_method_name View 中定义的一个列表:是一堆请求方式
        if request.method.lower() in self.http_method_name:
            # getattr 的第三个参数是默认值:self.http_method_not_allowed
            # 拿到get方法的内存地址
            handler = getattr(self,request.mathod.lower(),aslf.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
            # get(request,*args,**kwargs) 
            *args,**kwargs 传入了这个参数,然后就会去执行get方法,self会自己传过来
            # 同理,执行post方法
        return handler(request,*args,**kwargs)

    6、总结:请求来了---》as_view---》view---》dispatch---》分发到不同的函数,执行函数,拿到结果,然后返回

  比如说:我是get请求来的,在dispatch中做了分发
        handler(request,*args,**kwargs)执行这个是get,注意执行这个一定要有一个结果
                def dispatch(self,request,*args,**kwargs):
#request,*args,**kwargs这堆参数一定要写上,request是必写,*args,**kwargs这两个分别是有名,无名分组

二:resful的规范

  1、什么是resful(定义)

    是一个规范,简单的说,就是面向资源编程:把网络中所有东西,想象成资源

  2、10种规范(*****)

三:APIView源码分析

四:初识序列化

猜你喜欢

转载自www.cnblogs.com/zedong/p/10099188.html
今日推荐