请求进来 封装request. 版本限制 认证 权限 节流
版本 self.version_param url中版本的key
self.default_version
self.is_allowed_version
都是写在配置文件中 如果是默认就是?version= reverse 获取版本
print(request.version) 获取处理版本的对象
print(request.versioning_scheme) REST_FRAMEWORK = {
"DEFAULT_VERSION":'v1',
"ALLOWED_VERSIONS": ['v1','v2'] ,
"VERSION_PARAM":'version',
} URL中通过get的方式获取 自定义
from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView
from rest_framework.request import Request
# Create your views here. class ParamVersion(object):
def determine_version(self, request, *args, **kwarags):
version = request.query_params.get('version')
return version class UsersView(APIView):
versioning_class = ParamVersion
def get(self,request, *args, **kwargs):
# version = request._request.GET.get('version')
# print(version)
print(request.version) return HttpResponse('用户列表') 在路径中传参 常用方式
views.py
from django.shortcuts import render,HttpResponse
from rest_framework.versioning import QueryParameterVersioning,URLPathVersioning
class UsersView(APIView):
versioning_class = URLPathVersioning
def get(self,request, *args, **kwargs): print(request.version) return HttpResponse('用户列表') cmdb 下的 urls.py
from django.conf.urls import url,include
from cmdb import views
urlpatterns = [
url(r'^(?P<version>[v1|v2]+)/users/$',views.UsersView.as_view())
] 全局使用时 推荐使用的方式
setting文件
REST_FRAMEWORK = {
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"
"DEFAULT_VERSION":'v1',
"ALLOWED_VERSIONS": ['v1','v2'] ,
"VERSION_PARAM":'version',
} views.py文件
from django.shortcuts import render,HttpResponse
class UsersView(APIView):
def get(self,request, *args, **kwargs): print(request.version) return HttpResponse('用户列表') urls.py文件 cmdb下的
urlpatterns = [
url(r'^(?P<version>[v1|v2]+)/users/$',views.UsersView.as_view())
] 总结:
使用:
配置文件:
REST_FRAMEWORK = {
"DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"
"DEFAULT_VERSION":'v1',
"ALLOWED_VERSIONS": ['v1','v2'] ,
"VERSION_PARAM":'version',
}
路由系统
urlpatterns = [
url(r'^(?P<version>[v1|v2]+)/users/$',views.UsersView.as_view())
] 主路由
from django.conf.urls import url,include
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^cmdb/',include('cmdb.urls'))
] 视图中
from django.shortcuts import render,HttpResponse
from rest_framework.views import APIView from django.urls import reverse
from rest_framework.request import Request
# Create your views here. class UsersView(APIView):
#反向生成URL
def get(self,request, *args, **kwargs):
#获取版本
print(request.version)
#获取处理版本的对象
print(request.versioning_scheme)
#通过rest_framework反向生成URL
u1 = request.versioning_scheme.reverse(viewname='user',request=request)
print(u1)
#通过原生Django反向生成URL
u2 = reverse(viewname='user',kwargs={'version':})
print(u2)
return HttpResponse('用户列表')

rest_framework (版本)的更多相关文章

  1. Django Rest Framework源码剖析(四)-----API版本

    一.简介 在我们给外部提供的API中,可会存在多个版本,不同的版本可能对应的功能不同,所以这时候版本使用就显得尤为重要,django rest framework也为我们提供了多种版本使用方法. 二. ...

  2. Restframework的版本及分页

    1.版本 1.1基于url的get传参方式 1.创建django项目(起名我的是version),再创建一个app01应用 创建完成,通过python3 manage.py startapp api ...

  3. DRF版本组件

    1.DRF版本组件配置类局部使用 局部配置: 方式一:直接配置versioning_class=QueryParameterVersioning 方式二:直接配置versioning_class=UR ...

  4. Django rest framework(5)----解析器

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  5. 07 Django REST Framework 解析器与渲染器

    01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...

  6. resful规范

    1.简介 什么是resful resful是一个规范,说白了就是面向资源编程,把网络中所有的东西,想象成资源 2.规范 10条规范 1)API与用户的通信协议,总是用HTTPS协议:HTTPS比htt ...

  7. REST Framework组件的解析源码

    首先我们要知道解析器的作用 解析器就是对你请求体中的数据进行反序列化.封装 把你的所有的请求数据都封装在request.data中 以后就在request.data中获取数据 我们先导入rest_fr ...

  8. redis介绍及在购物车项目中的应用,用户认证

    1.redis 2.购物车的构建 api结构: models.py(创建完后自行添加数据) from django.db import models from django.contrib.conte ...

  9. DRF视图组件

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

随机推荐

  1. 12:打印 1 到最大的 n 位数

    题目:输入数字 n.按顺序打印出从 1 到 最大的 n 位十进制数.比方输入 3 ,则打印出 1.2 .3 一直到最大的3位数即 999. 解析: easy知道不能用 int 等数字类型表示(大数问题 ...

  2. nyoj 1189 yougth和他的朋友们 (DP)

    题目:pid=1189" target="_blank">nyoj 1189 yougth和他的朋友们 这题目是14年北京赛区的原题.讲题的时候说有三种解法,我们是 ...

  3. 怎么用命令行运行jar文件

    假设你配置好了jre环境,你如今有一个打包好的jar文件,你能够这样子開始运行 java -classpath example.jar mainClass -classpath告诉虚拟机在哪里找类的字 ...

  4. extjs grid 复制问题还有一种解决方式.

    之前的项目中尽管也常常使用到extjs,但也许是没有注意到,也也许是根本就没有须要用到这个功能. 前几天在和客户讨论需求时,客户说想要可以将gird表中的数据复制出来,当时没多想,感觉这功能extjs ...

  5. int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的差别

     加有constkeyword的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = &num; 1.       能够读自己 2.       能够通过*p改自己 ...

  6. c# 获取文件夹下面所有文件夹列表

    方法一: string dirPath = @"D:\App1"; List<string> dirs = new List<string>(Directo ...

  7. 关于iOS7中UIView效果失效问题的解决

    最近想做一个跑马灯的效果.于是写出了例如以下的跑马灯效果的代码...可是调试发现,在iOS6下动画是能够运行的,可是在iOS7下动画并不运行,没有达到预期的效果. [_scrollLabel size ...

  8. [NOI.AC#32]sort 构造

    链接 50分做法(只有0,1) 根据归并排序的思想,假设我们现在已经把 \(l\dots mid\) 和 \(mid+1\dots r\) 排好序 只要把左边连续的1和右边连续的0翻转即可 inlin ...

  9. php和js区别

    php和js区别 两者在语法上类似,楼上说的对,js=javascript是工作在浏览器端的脚本语言,他所提交的数据是交给浏览器来处理的.但是现在的Ajax技术已经可以把js提交的数据交付到浏览器来处 ...

  10. validform

    一.validform是什么?            validform是一款智能的表单验证js插件,它是基于jQuery库与css,我们只需要把表单对象放入,             就可以对整个表 ...