Django:RestFramework之-------版本控制
6.版本控制
- 从URL通过get传参获取版本。
6.1自定义版本控制
from rest_framework.views import APIView
class ParamVersion(object):
def determine_version(self,request,*args,**kwargs):
version = request.query_params.get("version")
return version
class UserView(APIView):
versioning_class = ParamVersion
def get(self,request,*args,**kwargs):
print(request.version)
# version = request.query_params.get("version")
# print(version)
return HttpResponse("用户列表")
6.2内置类版本控制
#方式1:
#settings.py配置
REST_FRAMEWORK = {
#默认版本V1
"DEFAULT_VERSION":"V1",
#允许版本V1,V2
"ALLOWED_VERSIONS":["V1","V2"],
#URL上标识版本字段
"VERSION_PARAM":"version"
}
from rest_framework.versioning import QueryParameterVersioning
class UserView(APIView):
#版本控制直接等于QueryParameterVersioning类即可,内部封装N多个方法
versioning_class = QueryParameterVersioning
def get(self,request,*args,**kwargs):
#通过request.version可打印版本
print(request.version)
# version = request.query_params.get("version")
# print(version)
return HttpResponse("用户列表")
#方式2:在路经中传参
#键入http://127.0.0.1:8000/api/v1/users/,获取版本 ***最常用
#settings.py配置
REST_FRAMEWORK = {
#控制版本执行的类
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning",
#默认版本号
"DEFAULT_VERSION":"v1",
#允许版本号
"ALLOWED_VERSIONS":["v1","v2"],
#URL上标识版本字段
"VERSION_PARAM":"version"
}
#url配置:
urlpatterns = [
url(r'^(?P<version>[v1|v2]+)/users/$', views.UserView.as_view()),
]
#views.py 视图函数使用
from rest_framework.versioning import URLPathVersioning
class UserView(APIView):
#直接等于URLPathVersioning
versioning_class = URLPathVersioning
def get(self,request,*args,**kwargs):
print(request.version)
# version = request.query_params.get("version")
# print(version)
return HttpResponse("用户列表")
6.3版本控制之源码解析:
#老套路dispatch方法,执行initial:
def initial(self, request, *args, **kwargs):
#这两行代码用于处理版本
version, scheme = self.determine_version(request, *args, **kwargs)
request.version, request.versioning_scheme = version, scheme
#request.version获取版本
#request.versioning_scheme获取处理版本对象
#进入determine_version,用于
def determine_version(self, request, *args, **kwargs):
"""
If versioning is being used, then determine any API version for the
incoming request. Returns a two-tuple of (version, versioning_scheme)
"""
if self.versioning_class is None:
return (None, None)
#处理版本类的对象
#versioning_class = api_settings.DEFAULT_VERSIONING_CLASS 或者 自定义
scheme = self.versioning_class()
#第一个参数为调用版本类的determine_version,获取到版本
#第二个参数,返回处理版本对象是哪个?
return (scheme.determine_version(request, *args, **kwargs), scheme
#那么scheme.determine_version(request, *args, **kwargs)如何获得版本,当执行版本类URLPathVersioning(内置的),它会执行如下方法:
def determine_version(self, request, *args, **kwargs):
version = kwargs.get(self.version_param, self.default_version)
if version is None:
version = self.default_version
if not self.is_allowed_version(version):
raise exceptions.NotFound(self.invalid_version_message)
#返回当前版本
return version
6.4内置方法:
#获取版本
print(request.version)
#根据url上name反向获取当前url
#reverse 执行时会把 request.version的得到的版本值 放入kwargs中,并生成url
url = request.versioning_scheme.reverse(viewname='uuu',request=request)
6.5版本总结
不需要自定义:
直接使用:
配置:
REST_FRAMEWORK = {
#控制版本执行的类
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning",
#默认版本号
"DEFAULT_VERSION":"v1",
#允许版本号
"ALLOWED_VERSIONS":["v1","v2"],
#URL上标识版本字段
"VERSION_PARAM":"version"
}
路由:
url(r'^(?P<version>[v1|v2]+)/users/$', views.UserView.as_view(),name='uuu'),
视图:
class UserView(APIView):
versioning_class = URLPathVersioning
def get(self,request,*args,**kwargs):
print(request.version)
url = request.versioning_scheme.reverse(viewname='uuu',request=request)
print(url)#http://127.0.0.1:8000/api/v1/users/
return HttpResponse("用户列表")
Django:RestFramework之-------版本控制的更多相关文章
- Django rest-framework框架-版本控制
第一版: from rest_framework.versioning import BaseVersioning class ParamVersion(object): def determine_ ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
- rest-framework之版本控制
rest-framework之版本控制 本文目录 一 作用 二 内置的版本控制类 三 局部使用 四 全局使用 五 示例 源码分析 回到目录 一 作用 用于版本的控制 回到目录 二 内置的版本控制类 f ...
- django restframework serializer 增加自定义字段
在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段.有两种方法实现 ...
- django restframework
一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...
- django restframework jwt
既然要来学习jwt(json web token),那么我们肯定是先要了解jwt的优势以及应用场景--跨域认证. $ pip install djangorestframework-jwt 传统coo ...
- django restframework 快速入门
django restframework 快速入门 基本流程 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显示 ...
- Django Restframework 实践(一)
具备以下知识: django http://www.cnblogs.com/menkeyi/p/5882464.html http://www.cnblogs.com/menkeyi/p/588245 ...
- django: rest-framework的 分页和过滤
django: rest-framework的 分页和过滤 2018年06月28日 10:09:01 weixin_42359464 阅读数:136 标签: flaskrestframeworkdja ...
随机推荐
- Elasticsearch 动态修改replica配置、增删replica
1. 获取当前所有index配置 curl -XGET http://localhost:9200/_settings 2. 获取某些index的配置 curl -XGET http://localh ...
- C#中的函数(一) 无参无返回值的函数
分析下C#中的函数 先写一个小例子,一个静态函数,无返回值,无形参 在第17行与20行分别下断点 F5调试运行,此时中断在第17行MyFunction(), 在第17行右键反汇编,看下反汇编代码 这里 ...
- Git 游离态的一次问题解决
jie@mozq MINGW64 /d/0xcEdu/xcEduService01 ((20ce6a5...)) $ git branch -v * (HEAD detached at 20ce6a5 ...
- 出现 sudo: unable to resolve host XXX 信息解决办法
Ubuntu环境, 每次执行sudo 就出现这个警告讯息:sudo: unable to resolve host XXX虽然sudo 还是可以正常执行,是机器在反解上的问题, 所以就直接从/etc ...
- 云服务器使用: 购买域名,域名绑定IP
有没有不知道域名是什么的,但是大家一定知道访问域名就是访问绑定在域名上的IP地址 域名有个好处就是一个域名可以绑定多个IP. 举个例子:百度的域名是https://www.baidu.com/ 然后咱 ...
- Promise以及async和await的用法
Promise是一个异步加载的方式,处理时使用new Promise返回一个对象,该对象可以调用then方法,then方法中有两个参数,第一个参数是加载成功时执行,第二个参数是加载失败时执行,then ...
- R地图包 maps
安装 maps install.packages(“maps”) 使用 maps library("maps") nz <- map_data("nz")
- Windows彻底卸载VMWare虚拟机详细步骤
不能卸载vmware ,原因是VMware的服务在运行中,停止服务就可以卸载了. 点击开始输入[services.msc],然后点击搜索到服务. 找到这个软件的图一的所有项,然后右键它属性. 全部设置 ...
- ASP.NET Core WebApi构建API接口服务实战演练
一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...
- docker-compose搭建zookeeper集群环境 CodingCode
docker-compose搭建zookeeper集群环境 使用docker-compose搭建zookeeper集群环境 zookeeper是一个集群环境,用来管理微服务架构下面的配置管理功能. 这 ...