from rest_framework.views import APIView
class APIView(View):
    ...
    @classmethod
    def as_view(cls, **initkwargs):
        ...
        # super方法调用父类(也就是View)的as_view方法,这个as_view返回其view方法的内存地址,
        view = super().as_view(**initkwargs)
        # 函数也是对象,可以给它加属性
        view.cls = cls
        view.initkwargs = initkwargs
        # 继承了APIView这个类的话,以后所有的请求都没有csrf认证了
        return csrf_exempt(view)
    
    
    	#父类View的as_view方法里面的view函数返回:self.dispatch(request, *args, **kwargs),self是自定义视图类(这个类继承了APIView)的对象,找到的是APIView里面的dispatch
        
    def dispatch(self, request, *args, **kwargs):
        """
        `.dispatch()` is pretty much the same as Django's regular dispatch,
        but with extra hooks for startup, finalize, and exception handling.
        """
        self.args = args
        self.kwargs = kwargs
        # 传入的request是django原生的request,经过处理以后和原生的不一样了
        request = self.initialize_request(request, *args, **kwargs)
        self.request = request
        self.headers = self.default_response_headers  # deprecate?

        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)

        except Exception as exc:
            response = self.handle_exception(exc)
		# 把响应的东西包装一下,根据请求客户端的不同,返回不同的东西,比如是浏览器发来的请求,就返回一个页面,postman的请求,就返回json格式数据
        self.response = self.finalize_response(request, response, *args, **kwargs)
        return self.response
    
APIView的initial方法
    def initial(self, request, *args, **kwargs):
        ...
        '''
        
        '''
        self.perform_authentication(request)
        '''
        
        '''
        self.check_permissions(request)
        '''
        
        '''
        self.check_throttles(request)