zoukankan      html  css  js  c++  java
  • 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对象中,就可以取出版本号
            -反向解析:
            因为request对象能取出版本号,内部自动填入
            如果是路由有别的有名/无名分组,需要手动传过去
    url2
    =request.versioning_scheme.reverse('ttt',request=request)
  • 相关阅读:
    JSP数据交互(一)
    response.setHeader()用法
    Vue初步认识
    Socket初步了解
    DOM4j的修改删除方式
    多线程
    ArrayList和Vector区别
    集合框架(一)
    深入C#数据类型
    深入.NET框架
  • 原文地址:https://www.cnblogs.com/cao123/p/10139797.html
Copyright © 2011-2022 走看看