1. 请求进来 封装request. 版本限制 认证 权限 节流
  2. 版本
  3.  
  4. self.version_param url中版本的key
  5. self.default_version
  6. self.is_allowed_version
  7. 都是写在配置文件中 如果是默认就是?version=
  8.  
  9. reverse
  10.  
  11. 获取版本
  12. print(request.version)
  13.  
  14. 获取处理版本的对象
  15. print(request.versioning_scheme)
  16.  
  17. REST_FRAMEWORK = {
  18. "DEFAULT_VERSION":'v1',
  19. "ALLOWED_VERSIONS": ['v1','v2'] ,
  20. "VERSION_PARAM":'version',
  21. }
  22.  
  23. URL中通过get的方式获取
  24.  
  25. 自定义
  26. from django.shortcuts import render,HttpResponse
  27. from rest_framework.views import APIView
  28. from rest_framework.request import Request
  29. # Create your views here.
  30.  
  31. class ParamVersion(object):
  32. def determine_version(self, request, *args, **kwarags):
  33. version = request.query_params.get('version')
  34. return version
  35.  
  36. class UsersView(APIView):
  37. versioning_class = ParamVersion
  38. def get(self,request, *args, **kwargs):
  39. # version = request._request.GET.get('version')
  40. # print(version)
  41. print(request.version)
  42.  
  43. return HttpResponse('用户列表')
  44.  
  45. 在路径中传参
  46.  
  47. 常用方式
  48. views.py
  49. from django.shortcuts import render,HttpResponse
  50. from rest_framework.versioning import QueryParameterVersioning,URLPathVersioning
  51. class UsersView(APIView):
  52. versioning_class = URLPathVersioning
  53. def get(self,request, *args, **kwargs):
  54.  
  55. print(request.version)
  56.  
  57. return HttpResponse('用户列表')
  58.  
  59. cmdb 下的 urls.py
  60. from django.conf.urls import url,include
  61. from cmdb import views
  62. urlpatterns = [
  63. url(r'^(?P<version>[v1|v2]+)/users/$',views.UsersView.as_view())
  64. ]
  65.  
  66. 全局使用时 推荐使用的方式
  67. setting文件
  68. REST_FRAMEWORK = {
  69. "DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"
  70. "DEFAULT_VERSION":'v1',
  71. "ALLOWED_VERSIONS": ['v1','v2'] ,
  72. "VERSION_PARAM":'version',
  73. }
  74.  
  75. views.py文件
  76. from django.shortcuts import render,HttpResponse
  77. class UsersView(APIView):
  78. def get(self,request, *args, **kwargs):
  79.  
  80. print(request.version)
  81.  
  82. return HttpResponse('用户列表')
  83.  
  84. urls.py文件 cmdb下的
  85. urlpatterns = [
  86. url(r'^(?P<version>[v1|v2]+)/users/$',views.UsersView.as_view())
  87. ]
  88.  
  89. 总结:
  90. 使用:
  91. 配置文件:
  92. REST_FRAMEWORK = {
  93. "DEFAULT_VERSIONING_CLASS":"rest_framework.versioning.URLPathVersioning"
  94. "DEFAULT_VERSION":'v1',
  95. "ALLOWED_VERSIONS": ['v1','v2'] ,
  96. "VERSION_PARAM":'version',
  97. }
  98. 路由系统
  99. urlpatterns = [
  100. url(r'^(?P<version>[v1|v2]+)/users/$',views.UsersView.as_view())
  101. ]
  102.  
  103. 主路由
  104. from django.conf.urls import url,include
  105. urlpatterns = [
  106. path('admin/', admin.site.urls),
  107. url(r'^cmdb/',include('cmdb.urls'))
  108. ]
  109.  
  110. 视图中
  111. from django.shortcuts import render,HttpResponse
  112. from rest_framework.views import APIView
  113.  
  114. from django.urls import reverse
  115. from rest_framework.request import Request
  116. # Create your views here.
  117.  
  118. class UsersView(APIView):
  119. #反向生成URL
  120. def get(self,request, *args, **kwargs):
  121. #获取版本
  122. print(request.version)
  123. #获取处理版本的对象
  124. print(request.versioning_scheme)
  125. #通过rest_framework反向生成URL
  126. u1 = request.versioning_scheme.reverse(viewname='user',request=request)
  127. print(u1)
  128. #通过原生Django反向生成URL
  129. u2 = reverse(viewname='user',kwargs={'version':})
  130. print(u2)
  131. 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. Android 中模仿 Twitter 实现 Toolbar Indicator

    项目地址:https://github.com/nekocode/ToolbarIndicator

  2. java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com

    错误如题. 原因:web.xml中的servlet映射<url-pattern> 配置错误 改动正确就可以. 我直接删除了,bug就攻克了. 另一个问题是 xxx.jar fail to ...

  3. Activity管理笔记

    文章仅记录自己学习该模块时的一点理解,看到哪写到哪.所以特别散. AMS管理四大组件外加进程管理,当中最庞大的算是Activity了吧. 1.AMS中对ActivityStack划分为两类.当中一类是 ...

  4. 基于One-Class的矩阵分解方法

    在矩阵分解中. 有类问题比較常见,即矩阵的元素仅仅有0和1. 相应实际应用中的场景是:用户对新闻的点击情况,对某些物品的购买情况等. 基于graphchi里面的矩阵分解结果不太理想.调研了下相关的文献 ...

  5. Linux内核编译測试

    内核编译: Step 1:配置内核编译选项. make menuconfig Optional Step :排除编译结果文件(.o)等之间的依赖性. make mrproper Optional St ...

  6. ServiceStack.Redis之IRedisClient<第三篇>【转】

    事实上,IRedisClient里面的很多方法,其实就是Redis的命令名.只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法,趁着现在对Redis不是特别了解,我也对着命令来了解一下这 ...

  7. 访问Storm ui界面,出现org.apache.storm.utils.NimbusLeaderNotFoundException: Could not find leader nimbus from seed hosts ["master" "slave1"]. Did you specify a valid list of nimbus hosts for confi的问题解决(图文详解)

    不多说,直接上干货! 前期博客 apache-storm-1.0.2.tar.gz的集群搭建(3节点)(图文详解)(非HA和HA)  问题详情 org.apache.storm.utils.Nimbu ...

  8. 【原创】RPM安装软件时解决依赖性问题(自动解决依赖型)

    满足以下3个条件才能自动解决依赖性: 1.使用rpmdb -redhat(在安装时会自动弹出依赖性错误) 2.所有互相依赖的软件都必须在同一个目录下面. 3.调用-aid参数.

  9. sublime text3前端常用插件

    安装Package Control 在安装插件之前,需要让sublime安装Package Control.打开Sublime Text的控制台,快捷键ctrl + ~,在控制台中输入以下代码. im ...

  10. 创建私有CA, 加密解密基础, PKI, SSL

    发现了一篇图文并茂的超棒的  加密解密, CA, PKI, SSL 的基础文章, 链接如下:https://blog.csdn.net/lifetragedy/article/details/5223 ...