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版本组件的更多相关文章

  1. python 全栈开发,Day99(作业讲解,DRF版本,DRF分页,DRF序列化进阶)

    昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...

  2. DRF视图组件

    DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...

  3. drf 频率组件 META字典详情

    drf频率组件 什么是频率 控制用户对某个url的请求频率,比如一分钟之内,只能访问三次 自定义频率规则 1.取出访问者ip 2.判断当前ip在不在访问字典中: 不在,则添加进去,返回True; 3. ...

  4. DRF之Jwt 实现自定义和DRF小组件及django-filter插件的使用

    一.DRF之Jwt 实现自定义 二.DRF(过滤,排序,分页)组件 三.Django-filter插件的使用和自定义 """ 1.drf-jwt手动签发与校验 :只是做t ...

  5. drf认证组件、权限组件、jwt认证、签发、jwt框架使用

    目录 一.注册接口 urls.py views.py serializers.py 二.登录接口 三.用户中心接口(权限校验) urls.py views.py serializers.py 四.图书 ...

  6. drf-jwt手动签发与校验,drf小组件:过滤、筛选、排序、分页

    复习 """ 频率组件:限制接口的访问频率 源码分析:初始化方法.判断是否有权限方法.计数等待时间方法 自定义频率组件: class MyThrottle(SimpleR ...

  7. DRF节流组件

    1.DRF节流组件自定义(限制访问频率)  方式一 自定义类和方法: 和上述的认证组件使用方式一样,定义一个频率组件类,推荐继承BaseThrottle类, 需定义defallow_request(s ...

  8. DRF认证组件

    1.DRF认证组件之视图注册用法(自定义简单使用) settings.py配置 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.a ...

  9. DRF 视图组件

    目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的"七十二变" 第一层:基于APIview的五个 ...

随机推荐

  1. web.config 301

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.we ...

  2. webug3.0靶场渗透基础Day_1

    第一关: 最简单的get注入 单引号报错 http://192.168.129.136/pentest/test/sqli/sqltamp.php?gid=1' order by 5 --+     ...

  3. 一篇文章带你编写10种语言HelloWorld

    0,编程语言排行榜 计算机编程语言众多,世界上大概有600 多种编程语言,但是流行的也就几十种.我们来看下编程语言排行榜,下面介绍两种语言排行榜. Ⅰ TIOBE 指数 该指数每月更新一次,它监控了近 ...

  4. SpringBoot中使用Fastjson/Jackson对JSON序列化格式化输出的若干问题

    来源 :https://my.oschina.net/Adven/blog/3036567 使用springboot-web编写rest接口,接口需要返回json数据,目前国内比较常用的fastjso ...

  5. docker容器介绍

                       Docker容器 一.什么是Docker? Docker时Docker.Lnc公司开源的一个基于LXC技术之上搭建的Container容器引擎,源代码托管在Git ...

  6. 【Linux常见命令】wc命令

    wc - print newline, word, and byte counts for each file wc命令用于计算字数. 利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指 ...

  7. 新手上路:Laravel-控制器基础

    1.控制器在哪 Controller目录默认存放于app\Htpp\Controllers下,当然,你可以自定义这个目录: Controllers文件夹有一个控制器基类Controller.php,你 ...

  8. Extmail邮件过滤和杀毒

    前面整合好了extmail,不过没有测试使用foxmail这种客户端去测试收发邮件功能,今天测试的时候发现了蛮多问题,大部分和/etc/authmysqlrc这个文件的配置和权限相关,都是小问题,折腾 ...

  9. salesforce零基础学习(九十六)Platform Event浅谈

    本篇参考:https://developer.salesforce.com/blogs/2018/07/which-streaming-event-do-i-use.html https://trai ...

  10. H5 -- 取消a标签在点击时的背景颜色

    原文链接:点我 1.取消a标签在移动端点击时的蓝色 a { -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-user-sele ...