首页
学习
活动
专区
圈层
工具
发布

Django Rest Framework 版本(下)

Django Rest Framework 版本(上)

<1> HttpRequest 参数传递

① 路由系统

② 视图

③ 配置文件

<2> URL 中定义

在 url 中定义,例如 http://127.0.0.1:8000/api/v1/

① 路由系统

② 视图

<3> 反向解析 URL

在 django 中也提供了一个 url 解析的函数 reverse,不过在 django rest framework 中也有一个将 reverse 函数封装一层的接口可以进行 url 反向解析。

  • 路由系统:加入 namespace 参数
  • 子路由系统:加入 name 参数

<4> 源码解析

① 找到 initial() 方法

从 dispatch 方法进入源码,找到 initial 方法

② 进入 initial() 方法

这里调用了 datermine_version() 方法,并拿到两个返回值封装到 request 中。这时候 request.version_scheme 就是一个版本对象了。

③ 查看具体的 datermine_version() 方法

④ 默认的版本处理对象

可以在 settings.py 文件中配置,全局使用。

⑤ drf 提供的版本类

在 url 反向解析中,调用了 request.versioning_scheme.reverse() 中的 reverse() 方法,说明 request.versioning_scheme 返回的是一个版本对象,可以调用它的方法。

BaseVersioning 基类定义了三个接口

  • datermine_version:返回版本
  • reverse:url 反向解析使用
  • is_allowed_version:就是判断版本号是否合法

而上面使用的两个超类 URLPathVersioning,QueryParameterVersioning 其实也是重写了 datermine_version 和 reverse 两个方法。

<五> 总结

版本的获取方式有多种,在 django rest framework 中也提供了一一对应的处理版本对象,可以根据自己的需要配置,或者继承重写接口使用。

配置也支持全局配置,和局部配置,在全局配置的时候,需要定义默认的版本号,以防万一。在进行 url 反向解析的时候 django rest framework 提供了一个更好的方式。

下一篇
举报
领券