Django进阶篇 Rest framework (一)

2019-07-18 11:22:16 浏览数 (1)

django rest framework(下面简称 drf)

在 django 中,路由匹配之后,会进行路由分发,这个时候会有两种选择模式,分别是 FBV 与 CBV。

1、FBV

fbv 就是在 url 中一个路径对应一个函数。

在视图函数中

2、CBV

cbv 就是在 url 中一个路径对应一个类,drf 主要使用 CBV。

在视图函数中

在路由匹配的时候看到 path("image", image.ImageView.as_view()),那这个 as_view() 是什么,既然没有在视图类中定义这个 as_view() 方法,就应该到父类(ImageView 的父类 View)中看下 View。

django 源码,路径是 djangoviewsgenericbase.py

3、django 的请求周期

根据 CBV 和 FBV django 的生命周期可以分两类

  • FBV:请求通过 uwsgi 网关,中间件,然后进入路由匹配,进入视图函数,连接数据库 ORM 操作,模板渲染,返回经过中间件,最终交给浏览器 response 字符串。
  • CBV:请求通过 uwsgi 网关,中间件,然后进入路由匹配,这里就与 FBV 有区别了,因为不再是视图函数而是视图类,会先经过父类-View 的 dispath 方法,进行请求方法的判断,再分发到视图类的方法,连接数据库-ORM 操作,模板渲染,返回经过中间件,最终交给浏览器 response 字符串。

在 drf 中主要使用 CBV,生命周期就变成:

请求通过 uwsgi 网关,中间件,然后进入路由匹配,这里就有区别了,先经过 drf 中-APIView 类中的 dispath 方法(这里假定视图类没有重写 APIView 中的 dispath 方法),在 dispath 中对 request 请求进行封装,反射回到视图类,连接数据库 ORM 操作,模板渲染,返回经过中间件,最终交给浏览器响应字符串。

0 人点赞