一: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源码分析
四:初识序列化