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的五个 ...
随机推荐
- 在php中如何实现cookie即时生效,不用刷新就可以使用
参考:https://www.jianshu.com/p/0468ef5dbf4d 今天在用php设置cookie的时候,发现cookie如果只是赋值一次的话,要手动刷新一下浏览器才能把数据及时更新, ...
- 2019-2020-1 20199308《Linux内核原理与分析》第六周作业
<Linux内核分析> 第五章 系统调用的三层机制(下) 5.1 给MenuOS增加命令 强制删除当前menu目录,用get clone重新克隆一个新版本的menu,运行make root ...
- SQLI-LABS学习笔记(四)
第十六关 和之前的关卡一样,修改闭合,无意义的关卡 ")闭合即可 第十七关 这题从源码上看发现 这里进行了两次查询 先查询了用户名是否存在 再查询密码是否匹配 ...
- Python3 字符串格式化(%操作符)
格式符 格式符为真实值预留位置,并控制显示的格式.格式符可以包含有一个类型码,用以控制显示的类型,如下: %s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) ...
- CSS样式1
编写CSS样式: 1.标签的style属性 如:<div style="width:980px;"></div> 2.写在head里面,style标签中写样 ...
- BigDecimal 01 - 在JAVA中怎么比较Double类型数据的大小?
2019独角兽企业重金招聘Python工程师标准>>> 非整型数,运算由于精度问题,可能会有误差,建议使用BigDecimal类型! double a = 0.001; doub ...
- solr7.4创建core,导入MySQL数据,中文分词
#solr版本:7.4.0 一.新建Core 进入安装目录下得server/solr/,创建一个文件夹,如:new_core 拷贝server/solr/configsets/_default/con ...
- uniq 只能相邻行去重
uniq只可以将相邻行重复数据进行去重处理: [root@localhost /data/mysql/mysql3306]#last | cut -d ' ' -f 1 | tail -15 > ...
- 写给MongoDB开发者的50条建议Tip21
本系列文章翻译自<50 Tips and Tricks for MongoDB Developers>,暂时没有找到中文版,反正自己最近也在深入学习mongodb,所以正好拿来翻译一下.一 ...
- JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载
EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:https://github.com/alibaba ...