DRF中版本控制的五种情况(源码分析)

在restful规范中要去,后端的API中需要体现版本。

drf框架中支持5种版本的设置。

1. URL的GET参数传递(*)

示例: user/?version=v1

# settings.py

REST_FRAMEWORK = {
"VERSION_PARAM": "v",
"DEFAULT_VERSION": "v1",
"ALLOWED_VERSIONS": ["v1", "v2", "v3"],
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.QueryParameterVersioning"
}

源码执行流程:

  1. 图解: 两部分

2.URL路径传递(*)

示例: /api/v1/user

# urls.py

urlpatterns = [
path('api/<str:version>/user', views.UserView.as_view()),
]
# settings.py

REST_FRAMEWORK = {
"VERSION_PARAM": "v",
"DEFAULT_VERSION": "v1",
"ALLOWED_VERSIONS": ["v1", "v2", "v3"],
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"
}

3.请求头传递

# settings.py

REST_FRAMEWORK = {
"VERSION_PARAM": "v",
"DEFAULT_VERSION": "v1",
"ALLOWED_VERSIONS": ["v1", "v2", "v3"],
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.AcceptHeaderVersioning"
}

ps: 可以使用postman伪造请求. 设置请求头: Accept : application/json; version=v3

4.二级域名传递

示例: v1.xxx.com/api/user

# settings.py

REST_FRAMEWORK = {
"VERSION_PARAM": "v",
"DEFAULT_VERSION": "v1",
"ALLOWED_VERSIONS": ["v1", "v2", "v3"],
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.HostName"
}

在使用二级域名这种模式时需要先做两个配置:

  • 域名需解析至IP,本地可以在hosts文件中添加

    127.0.0.1       v1.wupeiqi.com
    127.0.0.1 v2.wupeiqi.com
  • 在django的settings.py配置文件中添加允许域名访问

    ALLOWED_HOSTS = ["*"]

5.路由的namespace传递

小结

以后使用drf开发后端API接口时:

  1. 创建django程序
  2. 安装drf框架
  3. 创建一个app专门来处理用户的请求
  4. 注册APP -> app 和 drf配置
  5. 设置版本
  6. 编写视图类

DRF版本控制(源码分析)的更多相关文章

  1. DRF cbv源码分析 restful规范10条 drf:APIView的源码 Request的源码 postman的安装和使用

    CBV 执行流程 路由配置:url(r'^test/',views.Test.as_view()),  --> 根据路由匹配,一旦成功,会执行后面函数(request) --> 本质就是执 ...

  2. Django(44)drf序列化源码分析(1)

    序列化与反序列化   一般后端数据返回给前端的数据格式都是json格式,简单易懂,但是我们使用的语言本身并不是json格式,像我们使用的Python如果直接返回给前端,前端用的javascript语言 ...

  3. Django(63)drf权限源码分析与自定义权限

    前言 上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问 权限源码分析 源码入口:APIView.py文件下的initial方法下的check_per ...

  4. Django rest framework 版本控制(源码分析)

    基于上述分析 #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 self.initial(request, *args, **kwargs) #2.1处理版本信息 #versi ...

  5. drf认证源码分析

    补充: 一.django中间件之路由斜杠的自动添加源码 其实我们每次在写路由的时候,如果在路由层给他设置的是加/,但实际上我们在浏览器中输入的时候并没有加/发现也能调用,前面说了是浏览器内部走了重定向 ...

  6. drf源码分析系列---版本控制

    版本的使用 第一步:写路由url(r'^api/(P<version>\w+)/user/$',views.UserView.as_view()), 第二步:写模块导入from rest_ ...

  7. 探索drf执行流程之APIView源码分析

    Django REST framework 简介 现在新一代web应用都开始采用前后端分离的方式来进行,淘汰了以前的服务器端渲染的方式.而实现前后端分离是通过Django REST framework ...

  8. Django框架之drf:8、断点调试,权限、认证、频率组件源码分析,基于APIView编写分页,异常处理

    Django框架之drf 一.断点调式使用 ​ 指,在我们编写代码的时候,程序运行出现报错是无可避免的,当程序 出现报错时,我们需要找到出现报错的代码进行修改,如果时简短的代码很容易就可以找到报错位置 ...

  9. cvb源码分析,resful规范,drf,drf序列化组件,95

    1 CBV的源码分析 -Class Base View(基于类的视图) -Function Base View(基于函数的视图) -def as_view 类方法 -def view:类方法内部,闭包 ...

  10. drf源码分析系列---节流(访问频率限制)

    使用 from rest_framework.throttling import AnonRateThrottle from rest_framework.generics import ListAP ...

随机推荐

  1. springBoot 这货特别火

    现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下. Spring Boot ...

  2. qt webassembly emscripten build 编译 环境搭建 JS调用C++传参

    环境搭建 本文主要是针对ubuntu/mac编译环境搭建和调试环境 可以直接参考下面的dockerfile qt wasm build docker pull colorlength/qt-webas ...

  3. Training time_SSM

    三阶段 MyBatis 1 三层架构介绍 2 MyBatis介绍 类库:对于现有技术的一个封装. 框架:对于一个问题的一整套解决方案. MyBatis是一个半自动的ORM持久层的框架.刚开始叫做iBa ...

  4. JVM调优学习笔记

    TODO:需要学习的命令 jps jstat -gcutil pid xxxx jmap histo:live pid

  5. python高阶编程(一)

    1.生成器 通过列表⽣成式,我们可以直接创建⼀个列表.但是,受到内存限制,列表容量肯定是有限的.⽽且,创建⼀个包 含100万个元素的列表,不仅占⽤很⼤的存储空间,如果我们仅仅需要访问前⾯⼏个元素,那后 ...

  6. 网页返回unicode源码 python解码详细步骤

    刚入门python! 记录一下网页返回源码,中文部分被unicode编码,python如何处理 1.先提取编码后的数据(如果不提取正篇源码直接unicode解码,解码方法无法识别) 这个步骤属于逻辑问 ...

  7. 2020.6.6OO学期末总结

    0.前言 本次博客是对整个java及oo学习情况的一个概略性总结,目的在于反思这半年来的学习情况和实际感受,和具体学习方面的理解和问题. 1.作业过程总结 看着自己一个学期做的所有作业,我想起的是总是 ...

  8. 记录一次MySQL主从同步

    主库配置 server-id=1log-bin=mysql-binbinlog_format=ROWbinlog_row_image=minimalbinlog-do-db=yjtb-cloud 解释 ...

  9. CH573 CH582 CH579蓝牙从机(peripheral)例程讲解三(蓝牙服务修改)

    修改服务需要对蓝牙比较熟悉的工程师去完成,否则在例程功能满足自己需求时,不建议修改,很容易改错,下面就简单介绍下如何在别的char添加一个nofify属性. step1: 给Simple Profil ...

  10. Java学习笔记-封装Java Util包Base64方法

    懒人菜鸟入门Java系列-习惯性封装常用方法,方便开发过程中调用   注释: Java版本-1.8 1 * @Author wuwenchao 2 * @Version 1.0.0 3 * @Date ...