Django源码分析rest_framework 关于re_path('^publish/', views.PublishView.as_view()

re_path('^publish/', views.PublishView.as_view()

 1.请求进来先调用类的as_view方法

 2.我在自己类中没有找到as_view所以我只能去父类找

 3.我调用了我的父类,因为当前APIView继承了View父类。 我重写了 view中类方法中的类名,和实例化参数。然后我们进去父类View看下

class APIView(View):

 4.大家可以看到View父类返回的是一个view函数,而在内部闭包中view返回了一个叫dispatch的东东

 5.可以看到request.method.lower是否在列表中,如果在我就封装一个handler,所以我们需要分析下

self就等于Pubulish,反射get如果有就封装,没有就抛错

 6.可以看到heet_method_not_allowed当进去执行HttpResponseNotAllowed的时候我看到了不一样的

 7.也就是说我打印这个返回值或者类,都会触发__repr__的返回值信息,好我们接下啦返回

dispatch

 8.返回值确认好了,handler这时候就直接执行get,或者 post 或者就是405异常抛错信息,然后返回









 

猜你喜欢

转载自www.cnblogs.com/Rivend/p/11802880.html