当前位置: 首页 > news >正文

Django DRF版本号的处理

在restful规范中,后端的API中需要体现版本。如果项目比较大,需要些很多的视图类,在每一个类中都写一遍会比较麻烦,所以drf中也支持了全局配置。在每个版本处理的类中还定义了`reverse`方法,他是用来反向生成URL并携带相关的的版本信息用的。

REST_FRAMEWORK = {"DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.QueryParameterVersioning",  # 处理版本的类的路径"VERSION_PARAM": "version",  # URL参数传参时的key,例如:xxxx?version=v1"ALLOWED_VERSIONS": ["v1", "v2", "v3"],  # 限制支持的版本,None表示无限制"DEFAULT_VERSION": "v1",  # 默认版本
}

一、基于GET传递参数

1、settings.py

REST_FRAMEWORK={"UNAUTHENTICATED_USER": None,"VERSION_PARAM":"version",  # 决定url中版本的参数值;不设置默认也是这个值,可以通过修改这里修改,例如改为"v";"DEFAULT_VERSION":"v1", # 默认版本"ALLOWED_VERSIONS":["v1","v2"] #支持的版本范围
}

2、urls.py

urlpatterns = [# path('admin/', admin.site.urls),path('home/', views.HomeView.as_view(),name="hh"),
]

3、views.py

from rest_framework.versioning import   QueryParameterVersioningclass HomeView(APIView):# 传递过程中可以携带版本信息# http://127.0.0.1:8000/home/?version=v1 ,会自动读出版本赋值给request.versionversioning_class = QueryParameterVersioningdef get(self,request):print(request.version)print(request.versioning_scheme)url = request.versioning_scheme.reverse("hh",request=request)print("反向生产URL:",url)return Response("...")

二、基于路由传递参数

1、urls.py

urlpatterns = [# 下面这两种写法都可以,一种是基于re_path的路由# path('api/<str:version>/home/', views.HomeView.as_view(), name="hh"),re_path(r'^api/(?P<version>\w+)/home/',views.HomeView.as_view(),name="hh"),]

2、settings.py

REST_FRAMEWORK={"UNAUTHENTICATED_USER": None,"VERSION_PARAM":"version",  # 决定url中版本的参数值;不设置默认也是这个值,可以通过修改这里,修改;"DEFAULT_VERSION":"v1", # 默认版本"ALLOWED_VERSIONS":["v1","v2"] #支持的版本范围
}

3、views.py

from rest_framework.versioning import   URLPathVersioningclass HomeView(APIView):# 传递过程中可以携带版本信息# http://127.0.0.1:8000/home/?version=v1 ,会自动读出版本赋值给request.versionversioning_class = URLPathVersioningdef get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url = request.versioning_scheme.reverse("hh",request=request)print("反向生产URL:",url)return Response("...")

三、基于请求头传递参数

1、urls.py

urlpatterns = [# 基于请求头传递参数path('api/home/', views.HomeView.as_view(), name="hh"),
]

2、views.py 

from rest_framework.versioning import   QueryParameterVersioning,URLPathVersioning,AcceptHeaderVersioningclass HomeView(APIView):versioning_class = AcceptHeaderVersioningdef get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url = request.versioning_scheme.reverse("hh",request=request)print("反向生产URL:",url)return Response("...")

四、在实际项目中,第二种通过URL传递版本号的方式还是比较常用,在使用的时候,可以通过全局配置,在views中就不需要在引入和单独设置了,可以直接使用,案例如下: 

1、settings.py

REST_FRAMEWORK={# 版本号传递全局设置"VERSION_PARAM":"version",  # 决定url中版本的参数值;不设置默认也是这个值,可以通过修改这里,修改;"DEFAULT_VERSION":"v1", # 默认版本"ALLOWED_VERSIONS":["v1","v2"], #支 持的版本范围"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning",
}

2、urls.py

  # 基于URL传递参数path('api/<str:version>/home/', views.HomeView.as_view(), name="hh"),

3、views.py

from rest_framework.views import APIView
from rest_framework.response import Responseclass HomeView(APIView):def get(self,request,*args,**kwargs):print(request.version)print(request.versioning_scheme)url = request.versioning_scheme.reverse("hh",request=request)print("反向生产URL:",url)return Response("...")

相关文章:

Django DRF版本号的处理

在restful规范中&#xff0c;后端的API中需要体现版本。如果项目比较大&#xff0c;需要些很多的视图类&#xff0c;在每一个类中都写一遍会比较麻烦&#xff0c;所以drf中也支持了全局配置。在每个版本处理的类中还定义了reverse方法&#xff0c;他是用来反向生成URL并携带相关…...

[工业自动化-25]:IDEC和泉RU2S-24D/RU4S-24D继电器的使用说明和接线方式

目录 一、外观 1.1 继电器整体&#xff1a; 1.2 继电器主体&#xff1a; 1.3 底座&#xff1a; 二、RU系列通用继电器介绍 2.1 总体 2.2 性能规格 2.3 锁存杆 2.4 信号定义与连线 - 2S系列 &#xff08;1&#xff09;24V输入 &#xff08;2&#xff09;第一路输出 …...

如何通过短视频提高转化率?

在当今信息爆炸的时代&#xff0c;如何让自己的品牌在众多的短视频中脱颖而出&#xff0c;吸引更多的潜在客户&#xff0c;是许多企业面临的问题。抖音和快手作为目前最受欢迎的短视频平台&#xff0c;为企业提供了无限的营销机会。在这篇文章中&#xff0c;我们将探讨如何通过…...

微软离Altman越近,离OpenAI就越远!

大数据产业创新服务媒体 ——聚焦数据 改变商业 在OpenAI这场连续剧中&#xff08;之所以说是连续剧&#xff0c;这个事情肯定没完&#xff0c;后面肯定还会出续集&#xff09;&#xff0c;让我倍感意外的是&#xff0c;Altman刚跟OpenAI分手&#xff0c;“离婚手续”都还没办…...

minio集群部署(k8s内)

一、前言 minio的部署有几种方式&#xff0c;分别是单节点单磁盘&#xff0c;单节点多磁盘&#xff0c;多节点多磁盘三种方式&#xff0c;本次部署使用多节点多磁盘的方式进行部署&#xff0c;minio集群多节点部署最低要求需要4个节点&#xff0c;集群扩容时也是要求扩容的节点…...

【C语言】函数(四):函数递归与迭代,二者有什么区别

目录 前言递归定义递归的两个必要条件接受一个整型值&#xff08;无符号&#xff09;&#xff0c;按照顺序打印它的每一位使用函数不允许创建临时变量&#xff0c;求字符串“abcd”的长度求n的阶乘求第n个斐波那契数 迭代总结递归与迭代的主要区别用法不同结构不同时间开销不同…...

[原创](免改BIOS)使用Clover升级旧电脑-(高阶玩法)让固态硬盘内置Win11 PE启动系统

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…...

React项目中发生空白但不报错的原因分析和解决?

文章目录 前言组件渲染问题状态管理问题异步操作问题代码错误但未抛出异常如果我们使用的是chorme浏览器的话&#xff0c;可以下载一个开发者工具&#xff0c;例如下图&#xff1a;代码审查使用调试工具日志和输出检查外部依赖异步操作终极大法&#xff0c;不到万不得已不可以使…...

redis运维(十七)事务

一 redis事务 事务核心参考 ① 基础概念 1、场景引入核心&#xff1a;通过现象思考原因? 2、事务的概念 3、事务四大特性说明&#xff1a; redis只具备部分特性 重点1&#xff1a; 原子性和一致性 重点2&#xff1a; 隔离性和持久性 ② redis的事务 1、基础铺垫备注&…...

Vue框架学习笔记——Vue实例中el和data的两种写法

文章目录 前文提要Vue实例的el第一种写法第二种写法小结 Vue实例中data第一种写法&#xff0c;对象式效果图片第二种写法&#xff0c;函数式效果图片小结 前文提要 本文仅做自己的学习记录&#xff0c;如有错误&#xff0c;请多谅解 Vue实例的el 第一种写法 <body><…...

libbz2 for Mac OS makefile

git地址&#xff1a;git://sourceware.org/git/bzip2.git a文件Makefile # ------------------------------------------------------------------ # This file is part of bzip2/libbzip2, a program and library for # lossless, block-sorting data compression. # # bzip…...

测试工具JMeter的使用

目录 JMeter的安装配置 测试的性能指标 TPS 响应时长 并发连接 和 并发用户 CPU/内存/磁盘/网络 负载 性能测试实战流程 JMeter JMeter快速上手 GUI模式 运行 HTTP请求默认值 录制网站流量 模拟间隔时间 Cookie管理器 消息数据关联 变量 后置处理器 CSV 数据文…...

C++编程——输入

#include<bits/stdc.h> using namespace std; int main(){//beginint a 0, b 0, c 0, d 0, e 0;char f1, f2;char g[30];scanf("%d", &a); //输入整数并赋值给变量ascanf("%d", &b); //输入整数并赋值给变量bscanf("%d", &…...

opencv-直方图

直方图是一种对图像亮度分布的统计表示&#xff0c;它显示了图像中每个灰度级别的像素数量。在OpenCV中&#xff0c;你可以使用cv2.calcHist() 函数计算直方图。 以下是一个简单的示例&#xff0c;演示如何计算和绘制图像的直方图&#xff1a; import cv2 import numpy as np …...

el-table表格排序(需要后端判别),el-table导出功能(向后端发送请求)

&#xff08;1&#xff09;表格排序 &#xff08;2&#xff09;简单的table导出功能&#xff08;需要后台支撑&#xff09;必须要有iframe &#xff08;3&#xff09;页面所有代码&#xff1a; <template><div class"mainContainer"><el-form:model&…...

【MATLAB】全网入门快、免费获取、持续更新的科研绘图教程系列2

14 【MATLAB】科研绘图第十四期表示散点分布的双柱状双Y轴统计图 %% 表示散点分布的双柱状双Y轴统计图%% Made by Lwcah &#xff08;公众号&#xff1a;Lwcah&#xff09; %% 公众号&#xff1a;Lwcah %% 知乎、B站、小红书、抖音同名账号:Lwcah&#xff0c;感谢关注~ %% 更多…...

git与ssh多账户共存

git与ssh多账户共存 前言git多账户ssh多公钥参考 前言 在使用git与ssh时&#xff0c;经常会遇到多个账户共存的情况 例如使用不同的公钥登陆到不同的服务&#xff1b;使用不同的git信息进行commit git多账户 在默认情况下 git的信息存在 ~/.gitconfig 可以使用命令查看 git…...

BLE协议栈入门学习

蓝牙LE栈 物理层 频带 蓝牙LE在2400MHz到2483.5MHz范围内的2.4GHz免授权频段工作&#xff0c;该频段分为40个信道&#xff0c;每个信道间隔为2MHz。 时分 蓝牙LE是半双工的&#xff0c;可以发送和接收&#xff0c;但不能同时发送和接收&#xff0c;然而&#xff0c;所有的设…...

【反射】简述反射的构造方法,成员变量成员方法

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f384;什么是反射&#x1f384;获取class对象的三种方式⭐代码实现 &#x1f3…...

acwing算法基础之数学知识--求卡特兰数

目录 1 基础知识2 模板3 工程化 1 基础知识 题目&#xff1a;给定n个0和n个1&#xff0c;它们将按照某种顺序排成长度为2n的序列&#xff0c;求它们能排成的所有序列中&#xff0c;能够满足任意前缀序列中0的个数都不少于1的个数的序列有多少个&#xff1f; 输出的答案对 1 0 …...

Phi-3.5-mini-instruct开源模型优势:MIT协议+中文优化+低门槛部署

Phi-3.5-mini-instruct开源模型优势&#xff1a;MIT协议中文优化低门槛部署 1. 模型概述 Phi-3.5-mini-instruct是一款轻量级开源文本生成模型&#xff0c;专为中文场景优化设计。作为微软Phi系列的最新成员&#xff0c;它在保持小体积的同时&#xff0c;提供了出色的中文理解…...

BOSS直接自动点击未读消息并发送求简历请求

最新版本代码 26-04-23 修复没有对话无法发送求简历按钮(() > {/******************************************************************* 可配置参数******************************************************************/const CONFIG {countdownSeconds: 3,openConfirmDe…...

别只盯着LeetCode了!想进Google,你的GitHub仓库里还缺这几样东西

别只盯着LeetCode了&#xff01;想进Google&#xff0c;你的GitHub仓库里还缺这几样东西 在技术面试的竞技场上&#xff0c;LeetCode刷题早已成为标配动作。但当所有候选人都能熟练解决动态规划和图论问题时&#xff0c;面试官的注意力自然会转向那些能真正体现工程素养的细节—…...

VibeVoice-Realtime-0.5B部署教程:server.log日志排查常见问题

VibeVoice-Realtime-0.5B部署教程&#xff1a;server.log日志排查常见问题 你是不是也遇到过这种情况&#xff1a;兴冲冲地部署好一个AI应用&#xff0c;启动脚本一跑&#xff0c;终端上显示“服务启动成功”&#xff0c;但打开浏览器一看&#xff0c;页面死活加载不出来&…...

专业的离子风枪哪个公司好

在电子制造、半导体、汽车涂装等工业场景中&#xff0c;静电吸附灰尘、击穿元件等问题直接影响产品质量与生产效率&#xff0c;离子风枪作为高效静电消除设备&#xff0c;其品牌选择至关重要。行业调研显示&#xff0c;约60%的静电故障源于设备选型不当&#xff0c;因此需从技术…...

问卷设计对比实测:传统耗时易错 vs 虎贲等考 AI 一键生成,学术调研效率翻倍

每到课程论文、毕业论文、调研课题阶段&#xff0c;问卷设计与数据分析就成了最让学生头疼的环节。传统问卷要么题目不专业、维度不清晰&#xff0c;要么信效度不达标、数据无法分析&#xff1b;普通问卷工具只能收集数据&#xff0c;不会学术设计&#xff0c;更无法自动生成适…...

【VSCode 2026跨端调试终极指南】:覆盖Web/iOS/Android/Windows/macOS五端,实测性能提升47%的调试链路重构方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode 2026跨端调试架构全景概览 VSCode 2026 引入了全新的跨端调试抽象层&#xff08;Cross-Platform Debug Abstraction Layer, CPDAL&#xff09;&#xff0c;统一管理 Web、桌面&#xff08;Elec…...

光伏Boost电路硬件设计避坑指南:从5mH电感选型到IGBT驱动,一个实例讲透

光伏Boost电路硬件设计实战&#xff1a;从电感选型到IGBT驱动的关键细节 光伏发电系统的前级Boost电路设计看似简单&#xff0c;实则暗藏玄机。当输入电压在50V到150V之间大幅波动时&#xff0c;每个元器件的选型都直接影响系统稳定性和寿命。本文将基于1000W光伏系统的真实案例…...

MATLAB老用户看过来:手把手教你下载配置DeepLearnToolbox,重温经典深度学习工具箱

MATLAB经典深度学习工具箱DeepLearnToolbox的现代适配指南 引言&#xff1a;为何还要关注这个"过时"的工具箱&#xff1f; 在TensorFlow和PyTorch主导的深度学习时代&#xff0c;我们为何还要讨论一个MATLAB环境下已停止维护的工具箱&#xff1f;答案可能藏在这些场景…...

【深度解析】AUTOSAR EcuM:从启动到休眠的ECU状态管理核心

1. AUTOSAR EcuM模块的核心价值与定位 想象一下你正在驾驶一辆现代汽车&#xff0c;当你转动钥匙启动引擎时&#xff0c;仪表盘上的各种指示灯依次亮起&#xff0c;中控屏幕缓缓启动&#xff0c;空调系统开始工作——这一系列看似简单的动作背后&#xff0c;其实隐藏着一个复杂…...