rest_framework (版本)
请求进来 封装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 (版本)的更多相关文章
- Django Rest Framework源码剖析(四)-----API版本
一.简介 在我们给外部提供的API中,可会存在多个版本,不同的版本可能对应的功能不同,所以这时候版本使用就显得尤为重要,django rest framework也为我们提供了多种版本使用方法. 二. ...
- Restframework的版本及分页
1.版本 1.1基于url的get传参方式 1.创建django项目(起名我的是version),再创建一个app01应用 创建完成,通过python3 manage.py startapp api ...
- DRF版本组件
1.DRF版本组件配置类局部使用 局部配置: 方式一:直接配置versioning_class=QueryParameterVersioning 方式二:直接配置versioning_class=UR ...
- Django rest framework(5)----解析器
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...
- 07 Django REST Framework 解析器与渲染器
01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...
- resful规范
1.简介 什么是resful resful是一个规范,说白了就是面向资源编程,把网络中所有的东西,想象成资源 2.规范 10条规范 1)API与用户的通信协议,总是用HTTPS协议:HTTPS比htt ...
- REST Framework组件的解析源码
首先我们要知道解析器的作用 解析器就是对你请求体中的数据进行反序列化.封装 把你的所有的请求数据都封装在request.data中 以后就在request.data中获取数据 我们先导入rest_fr ...
- redis介绍及在购物车项目中的应用,用户认证
1.redis 2.购物车的构建 api结构: models.py(创建完后自行添加数据) from django.db import models from django.contrib.conte ...
- DRF视图组件
DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...
随机推荐
- [AngularJS]Chapter 3 使用AngularJS构建应用程序
本章内容提要: 如何布置AngularJS进行快速开发 开启服务器进行测试 使用Karma进行单元测试用例测试 编译压缩AngularJS进行生产 使用Batarang进行Debug 如何简化开发工作 ...
- BTrace介绍和生产环境样例
BTrace latest realese: release-1.2.5.1 BTrace guide(1.2-20101020): http://kenai.com/projects/btrace/ ...
- IOS版本号被拒的经历
IOS版本号被拒的经历: 1,登陆方式依赖外部平台 由于我们的APP是仅仅用微博登陆.想做成类似meerkat类型的.也能各种消息都同步微博. 结果当然行不通,这个确实是不听好人言.网上多个人都说过这 ...
- poj2492--A Bug's Life(并查集变形)
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28703 Accepted: 9350 De ...
- luogu 1558 色板游戏
写这篇博客不是为了总结我的算法,而是为了纪念让我爆零的套路..... 色板游戏 色板长度为\(L\),\(L\)是一个正整数,所以我们可以均匀地将它划分成\(L\)块\(1\)厘米长的小方格.并从左到 ...
- springMVC接受对象实体并且对象实体里面又有对象集合方式
springMVC接受对象实体并且对象实体里面又有对象集合方式: Ajax: function add(){ var orders = [ { orderNo : "H222255" ...
- POJ 3694 Network(Tarjan求割边+LCA)
Network Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10969 Accepted: 4096 Descript ...
- Scrapy中scrapy.Request和response.follow的区别
在写scrapy的spider类的parse方法的时候,有些链接需要提取出来继续爬取,这里scrapy提供了一些方法可以方便的实现这个功能,总结如下: 假设我们的目标a标签是target_a 方法1: ...
- ubuntu上配tensorflow
前一阵绕了大弯路,基本弄好了UEFI双系统后,面对的就是CUDA咋装在Linux. 好在教程好多,有些朋友建议先装CUDA再装显卡驱动.弄好之后记录一下详细过程吧. *** 这两天看了一些教程,还是感 ...
- 利用canvas制作简单的logo
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...