云博
对DRF的APIView执行流程的源码学习

阅读量:(348) 您现在所在的位置: 首页 百宝箱 Restful Api 对DRF的APIView执行流程的源码学习 作者:慎独、
简介:针对DRF的执行流程,对关键源码进行学习

跟着源码学习下DRF的APIView执行流程原理


一 入口函数as_view() 方法------入口

说明:

一般通过urlconf中配置路由时,需绑定类视图的as_view()方法。注意必须以类名.as_view()形式调用,而 不能实例化调用,因为@classonlymethod中重写了__get__内置方法进行限制。


二 基类中的as_view()-----闭包,实例化类

说明:

采用闭包形式,返回的视图取消了csrf验证,因此继承APIView中的所有类中的视图都不会在 进行防跨域伪造请求验证。因此需要搭配上JWT。


三 核心方法dispatch----反射处理请求

说明:

1.DRF对Django原生的wsgi协议的request进行了二次封装,向下兼容,使得现在的request能访问 原生的request对象,同时也封装了数据解析,以request.data形式表示(默认接受application/json格式),以往的django都是request.POST 和request.get来获取基于请求头为application/x-www-form-urlencode格式的数据。

2.利用反射机制映射到同名的自定义的请求处理方法上,然后执行。

3.封装了处理异常的方法,Django的dispatch中是没有的。

4.dispatch中的*args,**kwargs其实也就是经过路由匹配传过来的参数。


四 initial初始化-----认证,权限,频率检查


五 finialize_response-----数据格式渲染,头部添加


六 数据解析将数据封装到request.data


说明:

数据解析的封装是在二次封装request的对象实例化时候完成的,也就是在dispatch中调用了 initialize_request()方法。


点赞一波

2

    欢迎您游客

 小云标签


 网站统计:


笔记数: 总点赞量:

总访问量:   分类数目:

服务器:阿里云服务器

 网站动态: