根据RESTful规范 , 后端API中需要体现出版本,DRF中支持5种版本的设置,常见的三种如下
1. URL的GET中传递参数
- 在视图类中定义
from rest_framework.versioning import QueryParameterVersioningversioning_class = QueryParameterVersioning - 访问路由添加版本http://127.0.0.1:8000/api/users/?version=v1
- 在视图函数中获取版本request.version
- 其他配置REST_FRAMEWORK = {# 默认路由版本关键字为version,可以在此修改"VERSION_PARAM": "v",# 允许版本,否则报错"ALLOWED_VERSIONS": ["v1", "v2", "v3"],# 默认版本,路由没有添加版本 , 则使用默认版本"DEFAULT_VERSION": "v1",# 全局配置版本类 , 在视图类中就可以不定义了"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.QueryParameterVersioning"}

文章插图
源码解析

文章插图

文章插图
2.URL路径传递
- 在视图类中定义
from rest_framework.versioning import URLPathVersioningversioning_class = URLPathVersioning - 在访问路径中添加版本127.0.0.1:8000/api/v1/users/
- 在视图函数中获取版本request.version
- 其他配置REST_FRAMEWORK = {# 默认路由版本关键字为version,可以在此修改"VERSION_PARAM": "v",# 允许版本 , 否则报错"ALLOWED_VERSIONS": ["v1", "v2", "v3"],# 默认版本,路由没有添加版本,则使用默认版本"DEFAULT_VERSION": "v1",# 全局配置版本类 , 在视图类中就可以不定义了"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"}

文章插图
【4.drf-版本管理】源码流程同上

文章插图
3. 请求头传递
- 在视图类中定义
from rest_framework.versioning import AcceptHeaderVersioningversioning_class = AcceptHeaderVersioning - 在请求Accept中添加版本127.0.0.1:8000/api/users/Accept:version=v1
- 在视图函数中获取版本request.version
- 其他配置REST_FRAMEWORK = {# 默认路由版本关键字为version,可以在此修改"VERSION_PARAM": "v",# 允许版本 , 否则报错"ALLOWED_VERSIONS": ["v1", "v2", "v3"],# 默认版本,路由没有添加版本,则使用默认版本"DEFAULT_VERSION": "v1",# 全局配置版本类,在视图类中就可以不定义了"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"}

文章插图
源码解析同上

文章插图
4.反向生成在每个版本处理的类中还定义了
reverse
方法,他是用来反向生成URL并携带相关的的版本信息用的
文章插图
推荐阅读
- 如何更新电脑QQ版本(电脑qq关闭自动更新)
- 新人入坑,求科普英雄联盟怎么玩(新版本英雄联盟怎么玩)
- cf烟雾怎么调最清楚(cf新版本烟雾调法)
- YC-Framework版本更新:V1.0.10
- 一次SpringBoot版本升级,引发的血案
- Mysql InnoDB多版本并发控制MVCC
- 原神3.0版本新增了哪些秘境怪物
- 老版侠盗猎车英文版怎么设置中文(侠盗猎车手历史版本)
- Azure DevOps Server 设置项目管理用户,用户组
- 奥比岛:梦想国度新版本暗影之谜有什么内容