1:CBV
2:APIView
class BooksView(APIView):
pass
url(r'^books/$', views.Bookview.as_view(),name="books"),
流程分析:我们执行BooksView,此时访问路由books,访问的不简单是view,首先继承APIView类,最后执行View类下的view。
访问books,view的执行,view(request),接着执行APIView下面的dispatch()方法,随之进行分发,请求方式对应的实例方法(get,post,put,delete…)
3:def dispatch():
(1)初始化操作
(2)构建新的request
self.request=self.initial_request()
self.request._request
self.request.GET
self.request.data
(3)执行三大组件
认证,权限,频率
认证:request.user
self.initial(request, *args, **kwargs)
self.perform_authentication(request)
self.check_permissions(request)
self.check_throttles(request)
(4)分发
try:
self.initial(request, *args, **kwargs)
# Get the appropriate handler method
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
response = handler(request, *args, **kwargs)