4

4.drf-版本管理 - 阿明明

 1 year ago
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.
neoserver,ios ssh client

根据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"
    }
      
1760430-20221114200438773-742222734.png

源码解析

1760430-20221114200501179-1529779050.png

 

1760430-20221114200614419-1204468395.png

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"
    }
1760430-20221114201118864-688440454.png

源码流程同上

1760430-20221114201210168-1669427613.png

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"
    }
1760430-20221114203923560-1667877152.png

源码解析同上

 

1760430-20221114204009347-1651842292.png

4.反向生成

在每个版本处理的类中还定义了reverse方法,他是用来反向生成URL并携带相关的的版本信息用的

1760430-20221114204106447-1178576648.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK