探索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()方法

1551593-20190713154202228-265729483.png

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

1551593-20190713154211047-907214271.png

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

1551593-20190713154231754-1090387856.png

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

1551593-20190713154250694-963767390.png

Request类中干了啥

1551593-20190713154818101-915226894.png

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

1551593-20190713154808596-538734787.png

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

1551593-20190713154950102-1151613582.png

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

1551593-20190713154422235-1784541492.png

总结

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

转载于:https://www.cnblogs.com/oden/p/11180841.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值