探索drf执行流程之APIView源码分析

Django REST framework 简介

现在新一代web应用都开始采用前后端分离的方式来进行,淘汰了以前的服务器端渲染的方式。而实现前后端分离是通过Django REST framework(以下简称 DRF)来实现的。他是Django框架的一个扩展,提供了便捷的 REST API 开发框架。前后端分离方式有许多好处,比如:

1.1 可以前后端并行开发,提高开发效率

1.2 页面都在客户端进行渲染,提高了渲染速度,减小了服务器的压力

1.3 一套api提供给多个客户端使用,而且不限制客户端的类型(web,app均可)

提到前后端分离必然会提到restful,目标这是最流行的接口规范,越来越多的大型应用开始使用restful规范,restful强调一种无状态,资源的方式在django中很著名的一个框架是drf,帮我们减少了很多工作量。 网上关于 REST 的讨论很多,在一些细节的地方却经常稍有出入,不过大体思想都是充分利用 HTTP/HTTPS 协议的特点,比如 HTTP 方法、header 信息、HATEOAS,直接面向资源进行操作。

Django REST framework 框架

Django REST framework 框架是一个用于构建Web API 的强大的工具。通常简称为DRF框架 或 REST framework。DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。

Django REST framework 十大组件

drf中有封装了十大组件,分别是序列化组件,视图组件,认证组件,权限组件,频率组件,解析器,分页器,响应器,url控制器,版本控制。这十大组件,能够很好的帮助开发人员提升开发效率。

走进drf源码执行流程

路由层调用as_view()方法

视图类中没有as_view()方法,所以去父类APIView中找

as_view最终还是dispatch方法,此时应该注意查找顺序,从视图类往上找,这个dispatch方法是APIView中的dispatch,很多人用Ctrl+左键点击跳转会跳到View中的dispatch中。此处要特别注意。

initialize_request如何将原生的request封装到Request中

Request类中干了啥

把一些常用的方法重新封装了,如GET方法封装成了query_params,并伪装成属性。

原生的request和视图类中其他数据封装到Request类中后,走了initial方法

最后通过映射进行分发,并返回

总结

其实drf源码的执行流程和django中的view源码执行流程的区别关键是在于dispatch方法中执行的功能不同,drf是在dispatch中对原生的request进行了封装,然后通过initial()方法来执行认证,权限,频率的控制。后续会更新这三大组件的源码分析,敬请期待!!!!

原文地址:https://www.cnblogs.com/oden/p/11180841.html