django风格:FBV rest_framework风格:CBV CBV和FBV区别:https://www.cnblogs.com/yuanchenqi/articles/8715364.html2.rest_framework的Views:
3.django原生view写CBV:通过rest_framework的简单使用可以看出在Views.py中继承ModelViewSet
但是ModelViewSet–>继承(GenericViewSet)–>继承(GenericViewSet)–>继承(GenericAPIView)–>继承(views.APIView)–>继承 (View)又回到django中原生的View
Views.py中
路由中
看到BOOks调用了as_view()方法:
path(‘books1/’, views.Books.as_view()),
#在这个地方应该写个函数内存地址,views.Books.as_view()执行完,是个函数内存地址,as_view是一个类方法,类直接来调用,会把类自动传入
as_view()源码:
as_view()是View类的中的一个类方法
classonlymethod继承了classmethod 也就是说是一样的 类方法
as_view的原理:
4.as_view中的view方法:cls这个词语等于path(‘books1/’, views.Books.as_view()),所以cls是Books本身
**initkwargs 等于参数,如果不传入参数,将不作为
5.dispatch方法:1.self.request = request`,这个就是books中的request
2.返回了 return self.dispatch(request, *args, **kwargs)
# 假如request的请求方法小写 在 self.http_method_names: 中
if request.method.lower() in self.http_method_names:
# handler 等于 handler=getattr(self,'get'),你写的Book类的get方法的内存地址
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
# #执行get(request)
return handler(request, *args, **kwargs)



