ifengDRF版本控制(源码分析)

news2024/12/29 10:06:06

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传递

反向生成url:

# urls.py

urlpatterns = [
    path('api/user', views.UserView.as_view(), name='n1'),
    path('api/user/<int:pk>', views.UserView.as_view(), name='n2'),
]
# views.py

from django.shortcuts import HttpResponse
from rest_framework.views import APIView
from rest_framework.response import Response

# Create your views here.
class UserView(APIView):
	def get(self, request, *args, **kwargs):
		request.versioning_scheme.reverse('n1', request=request)
		request.versioning_scheme.reverse('n2', args=(11, ), request=request)
	return Response({'code': 0, 'data': '嘻嘻嘻哈啊哈哈'})

	def post(self, request, *args, **kwargs):
		pass


小结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/846770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【vue3】vue3和vue2的区别:

文章目录 Vue3框架的优点特点:一、生命周期:二、组合式api&#xff08;Composition API&#xff09;三、setup函数四、响应式原理1. 原理2. Object.defineProperty的缺陷3.proxy的优势 五、reactive函数和ref函数1. reactive函数》通常使用它复杂类型的响应式数据2. ref函数》使…

ResNet50卷积神经网络输出数据形参分析-笔记

ResNet50卷积神经网络输出数据形参分析-笔记 ResNet50包含多个模块&#xff0c;其中第2到第5个模块分别包含3、4、6、3个残差块 5049个卷积&#xff08;3463)*31和一个全连接层 分析结果为&#xff1a; 输入数据形状:[10, 3, 224, 224] 最后输出结果&#xff1a;linear_0 [10,…

Verilog求log10和log2近似

Verilog求log10和log2近似 Verilog求10对数近似方法&#xff0c;整数部分用位置index代替&#xff0c;小数部分用查找表实现 参考&#xff1a; Verilog写一个对数计算模块Log2(x) FPGA实现对数log2和10*log10

【C++】function包装器

function包装器的使用 function包装器的使用格式 function<返回类型(参数)> #include<iostream> #include<functional> using namespace std;class test { public:static void func1(int a,int b){cout << a b << endl;}void func2(int a, int …

机器学习、深度学习项目开发业务数据场景梳理汇总记录

本文的主要作用是对历史项目开发过程中接触到的业务数据进行整体的汇总梳理&#xff0c;文章会随着项目的开发推进不断更新。 一、MSTAR雷达影像数据 MSTAR&#xff08;Moving and Stationary Target Acquisition and Recognition&#xff09;雷达影像数据集是一种常用的合成…

PowerDesigner数据库设计工具使用笔记

简单记录下这个数据库设计工具的使用&#xff0c;在开发中设计数据库过程用得上&#xff0c;好记性不如烂笔头Q 显示窗口 工具类View >ToolBox 即可 选择数据库SQL语句类型是MySQL还是Orale以及版本 顶部栏中的Database 选中 第一个选项 change current DBMS 更改SQL…

HTML+CSS 改进前端简易响应式登录界面

day5 改进上次的项目 HTMLCSS前端 动态响应用户登录界面_一只名叫Me的猫的博客-CSDN博客 emmet自动创建html模板 在vscode中&#xff0c;空白html文件打入一个感叹号&#xff0c;可以自动创建html模板&#xff0c;避免手搓&#xff08;悲&#xff09;。 上次就是因为手搓导致漏…

基于vant的密码输入框,数字键盘,及金额输入

<template><div><el-button click"showPopup">余额支付</el-button><!--以下是密码输入--><van-popup v-model"passshow"closeableclose-icon-position"top-left"position"bottom":style"{ hei…

情感书单素材库大全,好的文案试试做成视频吧

当我们沉浸在热爱的小说或故事中时&#xff0c;我们会被情感所吸引&#xff0c;感受到其中所包含的情感&#xff0c;这些情感会在我们的内心深处留下印记。情感书单素材库是一个非常棒的资源&#xff0c;可以帮助我们发现那些让我们心动的故事和情感&#xff0c;从而创作出有意…

真实分享!赴日IT培训 在日本做程序员真的不加班?

如果有人告诉你完全没有加班那是不太可能的&#xff0c;但是日本的IT行业加班确实不严重&#xff0c;大家可以看一下厚生劳动省&#xff0c;你可以理解为中国的社会保障部这样一个作用&#xff0c;但是是做事风格不太一样的社会保障部&#xff0c;给大家放张IT产业加班图&#…

正运动亮相2023半导体设备材料与核心部件展示会,助力半导体产业高速高精应用

■展会名称&#xff1a; 第11届&#xff08;2023&#xff09;半导体设备材料与核心部件展示会 ■展会日期 2023年8月9日-11日 ■展馆地点 无锡太湖国际博览中心A6馆 ■展位号 A6-A361 正运动技术&#xff0c;作为国内领先的运动控制企业&#xff0c;将于2023年8月9日参加…

炼油厂运营商遭黑客入侵,全球范围内大规模宕机

据最新报道&#xff0c;以色列最大的炼油厂运营商BAZAN Group的网站遭遇黑客入侵&#xff0c;导致该网站在全球出现大范围宕机。在上周末&#xff0c;该集团全球各地的炼油厂网站均无法访问&#xff0c;显示"请求超时"和"被公司的服务器拒绝"等字样。黑客组…

排序第二课【选择排序】直接选择排序 与 堆排序

目录 1. 排序的概念&#xff1a; 2.选择排序的基本思想 3.直接选择排序 4.堆排序 1. 排序的概念&#xff1a; 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xf…

RISC-V架构的演变

随着苹果基于ARM的硅和新的RISC-V CPU的推出&#xff0c;对于CPU开发来说&#xff0c;这是一个令人兴奋的时刻&#xff0c;尽管开发人员的旅程目前对后者来说有点坎坷。 我最喜欢的理论是&#xff0c;没有发生是孤独的&#xff0c;而只是重复了以前发生过的事情&#xff0c;也…

手写springboot

前言 首先确定springboot在spring基础上主要做了哪些改动&#xff1a;内嵌tomcatspi技术动态加载 一、基本实现 1. 建一个工程目录结构如下&#xff1a; springboot: 源码实现逻辑 user : 业务系统2.springboot工程项目构建 1. pom依赖如下 <dependencies>…

vue基于java的高校就业管理系统的设计和实现f0c2k

相比于传统的高校就业管理方式&#xff0c;智能化的管理方式可以大幅提高学生的就业率&#xff0c;实现了高校就业管理的标准化、制度化、程序化的管理&#xff0c;有效地防止了高校就业的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确地查询和…

生命科学组织使用 OpenText ETX 随时随地为医疗保健和生命科学人员提供相关信息

生命科学组织使用 OpenText ETX 随时随地为医疗保健和生命科学人员提供相关信息 引领生命科学远程工作的IT新高度 生命科学组织一直承受着改进工作流程、降低成本和比以往更快地交付产品的压力。 使用远程访问和集中式 IT 基础架构&#xff0c;企业可以在加快上市时间方面取得…

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown()

什么是图像金字塔&#xff1f; 图像金字塔&#xff08;Image> Pyramid&#xff09;是一种用于多尺度图像处理和分析的技术&#xff0c;它通过构建一系列不同分辨率的图像&#xff0c;从而使得图像可以在不同尺度下进行处理和分析。图像金字塔在计算机视觉、图像处理和计算机…

就地程控站控制柜与斗轮机之间无线通讯

一、应用背景 马钢的前身是成立于1953年的马鞍山铁厂&#xff0c;2019年马钢集团正式成为中国宝武控股子公司。马钢产品以建筑用型线材为主&#xff0c;满足重型工业厂房、轻钢结构、高层建筑、桥梁结构、工业管道等构件的加工需要。目前马钢在岗员工4.8万人&#xff0c;具备了…

三菱PLC与变频器通讯-ModbusRTU协议

Modbus是Modicon公司为其PLC与主机之间的通讯而发明的串行通讯协议。其物理层采用RS232、485等异步串行标准。由于其开放性而被大量的PLC及RTU厂家采用。Modbus通讯方式采用主从方式的查询&#xff0d;相应机制&#xff0c;只有主站发出查询时&#xff0c;从站才能给出响应&…