4
4.drf-版本管理 - 阿明明
source link: https://www.cnblogs.com/victor1234/p/16874426.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
根据RESTful规范,后端API中需要体现出版本,DRF中支持5种版本的设置,常见的三种如下
1. URL的GET中传递参数
- 在视图类中定义
from rest_framework.versioning import QueryParameterVersioning versioning_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 URLPathVersioning versioning_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" }
源码流程同上
3. 请求头传递
- 在视图类中定义
from rest_framework.versioning import AcceptHeaderVersioning versioning_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并携带相关的的版本信息用的
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK