首页 > 编程语言 >APIView源码分析

APIView源码分析

时间:2023-12-20 15:25:53浏览次数:47  
标签:分析 APIView self request 视图 源码 执行 response view

1.和CBV源码执行流程相似,请求来了先走路由层:

path('books/', views.BookView.as_view())

 

2.走APIView的as_view方法,代码如下:

 @classmethod
    def as_view(cls, **initkwargs):
        view = super().as_view(**initkwargs) # 调用父类的 as_view,view还是View的as_view
        # 以后所有请求,都不会做csrf认证了
        return csrf_exempt(view)

——as_view执行结果跟之前CBV的一样,额外去除了csrf认证

 

3.内部核心执行dispatch方法并传入request,流程示意如下:

1.请求来了执行 views.BookView.as_view()(request)
2.view(request)
3.csrf_exempt(view)(request)
# 内部核心
4.return self.dispatch(request)

 

4.源码分析

def dispatch(self, request, *args, **kwargs):
        # 后续的request都是 initialize_request 返回结果--》新的request--》drf的Requet类的对象
        request = self.initialize_request(request, *args, **kwargs)
        # 新的request放到了 self.request中---》self是BookView类的对象
        # 后续视图类的方法中 可以直接 self.request取出 当次请求的request对象
        self.request = request

        try:
            # 执行了三大认证:
            '''
            self.perform_authentication(request)
            self.check_permissions(request)
            self.check_throttles(request)
            '''
            self.initial(request, *args, **kwargs)

            # 与CBV相似——通过反射,去视图类中:BookView中执行跟请求方式同名的方法
            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
           # request是新的Request类的对象了  get方法的第一个参数request也是新的
            response = handler(request, *args, **kwargs)
           ########################执行视图类的方法结束######
        except Exception as exc:
            # 如果在执行三大认证或视图类方法中,出了错,都会被异常捕获,统一处理
            response = self.handle_exception(exc)

        self.response = self.finalize_response(request, response, *args, **kwargs)
        return self.response

 

总结:

1 以后视图类方法中得request对象,变成了新的request,rest_framework.request.Request的对象,但是用起来跟之前一样
2 把新的request对象,同时放到了 视图类的对象中self.request = request后续从视图类中可以直接通过self.request取出来
3 在执行视图类的方法之前,执行了三大认证
4 如果三大认证或视图类的方法执行出错,会有全局异常处理
5 以后所有的接口都去除了csrf认证

 

标签:分析,APIView,self,request,视图,源码,执行,response,view
From: https://www.cnblogs.com/wellplayed/p/17916568.html

相关文章

  • 利用Python进行数据分析_Pandas_数据规整
    数据规整1.时间序列以及截面对齐importpandasaspdimportnumpyasnpfrompandasimportSeries,DataFrameimportwarningswarnings.filterwarnings("ignore")#设置一个日期范围date_range=pd.date_range(start="2023-01-01",end="2023-01-10",freq=......
  • 羚通视频智能分析平台视频监控算法分析玩手机打电话检测
    在当今数字化时代,视频监控技术已经广泛应用于我们生活的各个领域。然而,传统的视频监控方式往往需要大量的人力进行监控和分析,这不仅效率低下,而且容易出错。为了解决这个问题,羚通公司推出了一款全新的视频智能分析平台,该平台利用先进的视频监控算法,可以实时检测并分析手机打电话的......
  • 羚通视频智能分析平台视频监控算法分析玩手机打电话检测
    在当今数字化时代,视频监控技术已经广泛应用于我们生活的各个领域。然而,传统的视频监控方式往往需要大量的人力进行监控和分析,这不仅效率低下,而且容易出错。为了解决这个问题,羚通公司推出了一款全新的视频智能分析平台,该平台利用先进的视频监控算法,可以实时检测并分析手机打电话的行......
  • 给apollo源码中添加第三方库
    一、为什么需要引用外部库bazel工程期望所有库都在工作空间中,但是实际上有些库Ubuntu提供了非常简单的安装方式,这就涉及到引入外部库步骤1:在apollo/third_party中添加包,需要如下几个文件,写法参考proj的内容,其他涉及包管理的文件可以不要。步骤2:在apollo/tools/workspace.bzl......
  • 3个外贸B2B独立站建站的系统分析对比
    在当前全球化的商业环境中,外贸B2B独立站建站已成为企业拓展国际市场的关键一步。随着电子商务的快速发展,选择合适的建站系统对于企业在国际贸易中的成功至关重要。本文将对3个外贸B2B独立站建站系统进行深入分析对比,以帮助企业在众多选项中做出明智的选择。1.海洋建站:功能全面首先......
  • SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
    ......
  • 基于SaaS模式的云HIS信息管理系统源码
    云HIS全称为基于云计算的医疗卫生信息系统,是运用云计算大数据、物联网等新兴信息技术,按照现代医疗卫生管理要求,在一定区域范围内以数字化形式提供医疗卫生行业数据收集、存储、传递处理的业务和技术亚台云HIS系统采用主流成熟技术开发,软件结构简洁、代码规范易阅读,SaaS应用,全......
  • 继续空中滑步 逐帧分析
    视频地址:https://www.bilibili.com/video/BV1M64y1j7ts/?spm_id_from=333.1007.top_right_bar_window_default_collection.content.click心得分享:整体感觉就像在滑冰.注意上身,只有在滑的时候身体上升,其他时候身体都是下降.右脚水平前滑时候是另外一个脚发力在推,感觉非......
  • 分析推理
    题型:给定一组对象(如张三、李四)以及与对象相关的若干信息(职业、性别、年龄等),要求将对象与信息进行匹配。解题方法:1.排除法(1)适用条件:题干所给信息确定且充分,且选项全罗列,可以考虑排除法。(2)使用方法:边读相关信息,边排除与题干给出信息矛盾的选项。(边读边排除)2.确定信息法(1)适用条......
  • echarts画桑基图,并根据选择的分析因子画图
    最近要在系统中增加一个桑基图,要求桑基图可以根据选择的分析因子重新绘图。仔细看了下echarts的示例,桑基图本身很简单,困难的是如何根据数据资料整理成桑基图的数据格式,并且实现选择分析因子重新绘图。研究了几天的数据资料,特将方法写个demo记录下。<scriptsrc="./plugins/ech......