DRF版本组件
1.DRF版本组件配置类局部使用
局部配置:
方式一:直接配置versioning_class=QueryParameterVersioning
方式二:直接配置versioning_class=URLPathVersioning
#也需要在settings.py中的REST_FRAMEWORK进行全局配置
'''
default_version=api_settings.DEFAULT_VERSION
allowed_versions=api_settings.ALLOWED_VERSIONS
version_param=api_settings.VERSION_PARAM
'''

settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api.apps.ApiConfig',
'rest_framework',
] REST_FRAMEWORK = {
#1版本组件
'DEFAULT_VERSION':'v1',#默认的API版本
'ALLOWED_VERSIONS':['v1','v2'],#允许的API版本
'VERSION_PARAM':'version',#版本的key,默认的就是version(注意要和api接口中的key对应) }
settings.py
urls.py
drf主路由配置urls.py:
from django.conf.urls import url,include
urlpatterns = [
url(r'^api/', include('api.urls')),
]
drf主路由配置urls.py:
api主路由配置urls.py:
from django.conf.urls import url
from api import views urlpatterns = [
url(r'^(?P<version>v[\d+])/users/',views.UsersView.as_view(),name='users'),
]
api主路由配置urls.py:
views.py:
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from rest_framework.versioning import BaseVersioning, QueryParameterVersioning, URLPathVersioning
from django.urls import reverse class UsersView(APIView):
# API版本组件(局部配置)----返回结果都是一样
# 也需要在settings.py中的REST_FRAMEWORK进行全局配置
'''
default_version = api_settings.DEFAULT_VERSION
allowed_versions = api_settings.ALLOWED_VERSIONS
version_param = api_settings.VERSION_PARAM
'''
# (1)当版本号以查询参数形式传递时:比如:http://127.0.0.1:8000/api/users/?version=v1
# (推荐第2种方式,此方式url(r'^/users/',views.UsersView.as_view(),name='users'),)
# versioning_class = QueryParameterVersioning # (2)当版本号以路径urlpath形式传递时:比如:http://127.0.0.1:8000/api/v1/users/
# (注意在urls.py中使用正则匹配url(r'^(?P<version>v[\d+])/users/',views.UsersView.as_view(),name='users'),)
versioning_class = URLPathVersioning def get(self, request, *args, **kwargs):
print(request.version) # 获取版本号
print(request.versioning_scheme) # 获取到版本号处理的类对象,封装了reverse方法
print(request.versioning_scheme.reverse(viewname='users', request=request)) # 反向解析url
# print(reverse(viewname='users',kwargs={'version':request.version}))#django原生解析,必须指定参数 return HttpResponse('get_users') def post(self, request, *args, **kwargs):
return HttpResponse('post_user')
views.py:
2.DRF版本组件配置类推荐全局配置
一般在版本组件中推荐使用URLPathVersioning类进行版本控制

settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api.apps.ApiConfig',
'rest_framework',
] REST_FRAMEWORK = {
#版本组件(全局配置)----针对所有的继承APIView的类,在认证+权限+节流之前
'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',#设置版本组件类---#http://127.0.0.1:8000/api/v1/users/
'DEFAULT_VERSION':'v1',#默认的API版本
'ALLOWED_VERSIONS':['v1','v2'],#允许的API版本
'VERSION_PARAM':'version',#版本的key,默认的就是version(注意要和api接口中的key对应) }
settings.py
urls.py
drf主路由配置urls.py:
from django.conf.urls import url,include
urlpatterns = [
url(r'^api/', include('api.urls')),
]
drf主路由配置urls.py:
api主路由配置urls.py:
from django.conf.urls import url
from api import views
#http://127.0.0.1:8000/api/v1/users/
urlpatterns = [
url(r'^(?P<version>v[\d+])/users/',views.UsersView.as_view(),name='users'),
]
api主路由配置urls.py:
views.py:
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from django.urls import reverse class UsersView(APIView): def get(self, request, *args, **kwargs):
print(request.version) # 获取版本号
print(request.versioning_scheme) # 获取到版本号处理的类对象,封装了reverse方法
print(request.versioning_scheme.reverse(viewname='users', request=request)) # 反向解析url
# print(reverse(viewname='users',kwargs={'version':request.version}))#django原生解析,必须指定参数 return HttpResponse('get_users') def post(self, request, *args, **kwargs):
return HttpResponse('post_user')
views.py:
DRF版本组件的更多相关文章
- python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- DRF视图组件
DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...
- drf 频率组件 META字典详情
drf频率组件 什么是频率 控制用户对某个url的请求频率,比如一分钟之内,只能访问三次 自定义频率规则 1.取出访问者ip 2.判断当前ip在不在访问字典中: 不在,则添加进去,返回True; 3. ...
- DRF之Jwt 实现自定义和DRF小组件及django-filter插件的使用
一.DRF之Jwt 实现自定义 二.DRF(过滤,排序,分页)组件 三.Django-filter插件的使用和自定义 """ 1.drf-jwt手动签发与校验 :只是做t ...
- drf认证组件、权限组件、jwt认证、签发、jwt框架使用
目录 一.注册接口 urls.py views.py serializers.py 二.登录接口 三.用户中心接口(权限校验) urls.py views.py serializers.py 四.图书 ...
- drf-jwt手动签发与校验,drf小组件:过滤、筛选、排序、分页
复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleR ...
- DRF节流组件
1.DRF节流组件自定义(限制访问频率) 方式一 自定义类和方法: 和上述的认证组件使用方式一样,定义一个频率组件类,推荐继承BaseThrottle类, 需定义defallow_request(s ...
- DRF认证组件
1.DRF认证组件之视图注册用法(自定义简单使用) settings.py配置 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.a ...
- DRF 视图组件
目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的"七十二变" 第一层:基于APIview的五个 ...
随机推荐
- windows 删除非法目录
用PHP写错了路径,创建了非法目录,提示不存在该项目 复制下面 添加为批处理文件 DEL /F /A /Q \\?\%1RD /S /Q \\?\%1 将文件移入这个文件
- Java ASM3学习(3)
MethodVisitor ClassVisitor的visitMethod能够访问到类中某个方法的一些入口信息,那么针对具体方法中字节码的访问是由MethodVisitor来进行的 访问顺序如下,其 ...
- java中functional interface的分类和使用
目录 简介 Functional Interface Function:一个参数一个返回值 BiFunction:接收两个参数,一个返回值 Supplier:无参的Function Consumer: ...
- 交换机上的MAC地址表
拓扑图: 1.首先在R1上的配置: R1(config)#int R1(config)#interface g R1(config)#interface gigabitEthernet 0/0 R1( ...
- Ethtool工具源码剖析
Ethtool工具源码剖析 ethool是一个实用的工具,用来给系统管理员以大量的控制网络接口的操作.可以用来控制接口参数,速度,介质类型,双工模式,DMA环设置,硬件校验和,LAN唤醒操作等.本人经 ...
- Bomb Enemy 炸弹人
Given a 2D grid, each cell is either a wall 'W', an enemy 'E' or empty '0' (the number zero), return ...
- 数据结构--栈(附上STL栈)
定义: 栈是一种只能在某一端插入和删除数据的特殊线性表.他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后被压入栈的,最先弹出).因此栈 ...
- Navicat,SQL注入,pymysql模块
# 关键字exists(了解) 只返回布尔值 True False 返回True的时候外层查询语句执行 返回False的时候外层查询语句不再执行 select * from emp where exi ...
- 网络流 I - Fox And Dinner CodeForces - 510E
Fox Ciel is participating in a party in Prime Kingdom. There are n foxes there (include Fox Ciel). T ...
- Qt for Android (三) 打开Android相册并选一个图片进行显示
Qt for Android (三) 这两天弄了一下android相册的相关功能.还是花了挺长时间的,这里总结一下,避免以后再踩坑.同时也在这篇文章里面补齐一些android开发的基础支持 打开And ...