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的五个 ...
随机推荐
- http_response_code()和header()
1.http_response_code — 获取/设置响应的 HTTP 状态码向服务器发送成功状态码:http_response_code(200); 返回值如果提供了response_code,将 ...
- css3--弹性布局
来源:https://www.cnblogs.com/xuyuntao/articles/6391728.html
- tcp的重传与超时
TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制. 其基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到 ...
- MySQL权限原理及删除MySQL的匿名账户
MySQL权限系统的工作原理 MySQL权限系统通过下面两个阶段进行认证: (1)对连接的用户进行身份认证,合法的用户通过认证,不合法的用户拒绝连接: (2)对通过认证的合法用户赋予相应的权限,用户可 ...
- USACO Training Section 1.2 挤牛奶Milking Cows
题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...
- POJ - 3074 Sudoku (搜索)剪枝+位运算优化
In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 × 3 subgrids. For exa ...
- python(面向对象-类封装调用)
一.面对对象思想 (1)大家肯定听过 Python 中”一切皆对象“的说法,但可能并不了解它的具体含义,只是在学习的时候听说 Python 是面向对象的编程语言,本节将向大家详细介绍 Python 面 ...
- docker overlay network
下载binary consul wget https://releases.hashicorp.com/consul/1.2.2/consul_1.2.2_linux_amd64.zip unzip ...
- commons-logging slf4j log4j 区别
日志门面 1.Apache通用日志接口(commons-logging.jar) Apache Commons包中的一个,包含了日志功能,必须使用的jar包.这个包本身包含了一个Simple Logg ...
- E. Reachability from the Capital dfs暴力
E. Reachability from the Capital 这个题目就是给你一个有向图,给你起点,问增加多少条边让这个图变成一个连通图. 这个因为n只有5000m只有5000 所以可以暴力枚举这 ...