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 反向解析。
<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 基类定义了三个接口
而上面使用的两个超类 URLPathVersioning,QueryParameterVersioning 其实也是重写了 datermine_version 和 reverse 两个方法。
<五> 总结
版本的获取方式有多种,在 django rest framework 中也提供了一一对应的处理版本对象,可以根据自己的需要配置,或者继承重写接口使用。
配置也支持全局配置,和局部配置,在全局配置的时候,需要定义默认的版本号,以防万一。在进行 url 反向解析的时候 django rest framework 提供了一个更好的方式。