博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rest-framework之版本控制
阅读量:5253 次
发布时间:2019-06-14

本文共 2160 字,大约阅读时间需要 7 分钟。

本文目录

一 作用

用于版本的控制

二 内置的版本控制类

from rest_framework.versioning import QueryParameterVersioning,AcceptHeaderVersioning,NamespaceVersioning,URLPathVersioning#基于url的get传参方式:QueryParameterVersioning------>如:/users?version=v1#基于url的正则方式:URLPathVersioning------>/v1/users/#基于 accept 请求头方式:AcceptHeaderVersioning------>Accept: application/json; version=1.0#基于主机名方法:HostNameVersioning------>v1.example.com#基于django路由系统的namespace:NamespaceVersioning------>example.com/v1/users/

三 局部使用

#在CBV类中加入versioning_class = URLPathVersioning

四 全局使用

REST_FRAMEWORK = {    'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',    'DEFAULT_VERSION': 'v1',            # 默认版本(从request对象里取不到,显示的默认值)    'ALLOWED_VERSIONS': ['v1', 'v2'],   # 允许的版本    'VERSION_PARAM': 'version'          # URL中获取值的key}

五 示例

基于正则的方式:

from django.conf.urls import url, includefrom web.views import TestViewurlpatterns = [    url(r'^(?P
[v1|v2]+)/test/', TestView.as_view(), name='test'),]
url
from rest_framework.views import APIViewfrom rest_framework.response import Responsefrom rest_framework.versioning import URLPathVersioningclass TestView(APIView):    versioning_class = URLPathVersioning    def get(self, request, *args, **kwargs):        # 获取版本        print(request.version)        # 获取版本管理的类        print(request.versioning_scheme)        # 反向生成URL        reverse_url = request.versioning_scheme.reverse('test', request=request)        print(reverse_url)        return Response('GET请求,响应内容')
views.py
# 基于django内置,反向生成url        from django.urls import reverse        url2=reverse(viewname='ttt',kwargs={
'version':'v2'}) print(url2)
View Code

 

源码分析

#执行determine_version,返回两个值,放到request对象里version, scheme = self.determine_version(request, *args, **kwargs)request.version, request.versioning_scheme = version, schemedef determine_version(self, request, *args, **kwargs):        #当配置上版本类之后,就会实例化        if self.versioning_class is None:            return (None, None)        scheme = self.versioning_class()        return (scheme.determine_version(request, *args, **kwargs), scheme)

 

转载于:https://www.cnblogs.com/di2wu/p/10153498.html

你可能感兴趣的文章
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
perl 学习笔记
查看>>
31 Days of Windows Phone
查看>>
poj 1184(聪明的打字员)
查看>>
Ubuntu下面安装eclipse for c++
查看>>
C#压缩或解压(rar和zip文件)
查看>>
让IE浏览器支持CSS3圆角属性的方法
查看>>
巡风源码阅读与分析---nascan.py
查看>>
LiveBinding应用 dataBind 数据绑定
查看>>