DRF版本组件
时间:2019-09-23
本文章向大家介绍DRF版本组件,主要包括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对应) }
urls.py
drf主路由配置urls.py:
from django.conf.urls import url,include urlpatterns = [ url(r'^api/', include('api.urls')), ]
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'), ]
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')
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对应) }
urls.py
drf主路由配置urls.py:
from django.conf.urls import url,include urlpatterns = [ url(r'^api/', include('api.urls')), ]
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'), ]
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')
原文地址:https://www.cnblogs.com/open-yang/p/11573297.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈Django前端后端值传递问题
- sklearn和keras的数据切分与交叉验证的实例详解
- django Model层常用验证器及自定义验证器详解
- PyQT5 实现快捷键复制表格数据的方法示例
- Python爬虫headers处理及网络超时问题解决方案
- python报错: 'list' object has no attribute 'shape'的解决
- Python应用实现双指数函数及拟合代码实例
- 浅谈django不使用restframework自定义接口与使用的区别
- 实例解析php的数据类型
- 实现PHP中session存储及删除变量
- php微信公众号开发之秒杀
- php fread函数使用方法总结
- Yii2框架控制器、路由、Url生成操作示例
- Laravel框架实现调用百度翻译API功能示例
- phpstudy2018升级MySQL5.5为5.7教程(图文)