django rest文檔好少,rest-framework之版本控制

 2023-10-21 阅读 17 评论 0

摘要:作用: 用于版本的控制 內置的版本控制類 from rest_framework.versioning import URLPathVersioning, QueryParameterVersioning, AcceptHeaderVersioning #基于url的正則方式:URLPathVersioning------>/v1/users/(需要掌握這種) #基于url的ge

作用:

用于版本的控制

內置的版本控制類

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, AcceptHeaderVersioningclass Book(ViewSetMixin, APIView):# 局部使用versioning_class = URLPathVersioningdef get_all(self, request,*args,**kwargs):
     #獲取版本
print(request.version)# 路由反向解析,這種方式不好,麻煩# from django.urls import reverse# url=reverse(viewname='cao',kwargs={'version':request.version})# print(url)# 提供給咱的解析,為了反向生成urlreverse_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)

?

轉載于:https://www.cnblogs.com/cao123/p/10139797.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/154725.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息