rest-framework之版本控制

作用:

用于版本的控制

内置的版本控制类

from rest_framework.versioning import URLPathVersioning, QueryParameterVersioning, AcceptHeaderVersioning
#基于url的正则方式:URLPathVersioning------>/v1/users/(需要掌握这种)
#基于url的get传参方式:QueryParameterVersioning------>如:/users?version=v1
#基于 accept 请求头方式:AcceptHeaderVersioning------>Accept: application/json; version=1.0
#基于主机名方法:HostNameVersioning------>v1.example.com
#基于django路由系统的namespace:NamespaceVersioning------>example.com/v1/users/

局部使用

#在CBV类中加入
versioning_class = URLPathVersioning

全局使用,在setting中配置:

REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.QueryParameterVersioning',
    'DEFAULT_VERSION': 'v1',            # 默认版本(从request对象里取不到,显示的默认值)
    'ALLOWED_VERSIONS': ['v1', 'v2'],   # 允许的版本
    'VERSION_PARAM': 'version'          # URL中获取值的key
}

路由配置,基于正则的方式:

urlpatterns = [
 url(r'^(?P<version>[v1|v2]+)/books/$', views.Book.as_view({'get':'get_all'}),name='cao'),
]

view.py-视图层

# 版本控制
from rest_framework.versioning import URLPathVersioning, QueryParameterVersioning, AcceptHeaderVersioning


class Book(ViewSetMixin, APIView):
    # 局部使用
    versioning_class = URLPathVersioning

    def get_all(self, request,*args,**kwargs):
     #获取版本
print(request.version) # 路由反向解析,这种方式不好,麻烦 # from django.urls import reverse # url=reverse(viewname='cao',kwargs={'version':request.version}) # print(url) # 提供给咱的解析,反向生成url reverse_url=request.versioning_scheme.reverse('cao',request=request) print(url) response = {'status': 100, 'msg': '查询成功'} book_list = models.Book.objects.all() # 实例化产生一个加密分页的对象 page = CursorPagination() # 按nid排序 page.ordering = 'nid' page_list = page.paginate_queryset(book_list, request, self) # 丢到序列化类中,完成序列化 ser = MySer.BookSerializers(instance=page_list, many=True) # 最后返回数据 return page.get_paginated_response(ser.data)

总结使用:

版本控制
        掌握的:URLPathVersioning
        -在setting中配置:
                'VERSION_PARAM':'version',
                'DEFAULT_VERSION':'v1',
                'ALLOWED_VERSIONS': ['v1', 'v2'],
        -局部使用:
            versioning_class = URLPathVersioning
            
        -全局使用:
            'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
        -路由配置:
            url(r'^(?P<version>[v1|v2|v3]+)/books/$', views.Book.as_view({'get':'get_all'}),name='ttt'),
        -在视图类中的request对象中,就可以取出版本号
        -反向解析:
            url2=request.versioning_scheme.reverse('ttt',request=request)

猜你喜欢

转载自www.cnblogs.com/cao123/p/10139797.html