首页 > 其他分享 >【二十三】Django框架(Rest Framework)之版本控制

【二十三】Django框架(Rest Framework)之版本控制

时间:2023-07-17 11:24:56浏览次数:38  
标签:版本控制 不同 视图 Django v1 Rest 版本 class

【一】为什么需要版本控制

  • API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据)。
  • DRF提供了许多不同的版本控制方案。
  • 可能会有一些客户端因为某些原因不再维护了
    • 但是我们后端的接口还要不断的更新迭代
    • 这个时候通过版本控制返回不同的内容就是一种不错的解决方案。

【二】DRF提供的版本控制方案

  • DRF提供了五种版本控制方案,如下图:

【三】版本控制系统的使用

【1】全局配置

  • 这里我们以 URLPathVersioning 为例
    • 还是在项目的settings.py中REST_FRAMEWORK配置项下配置:
REST_FRAMEWORK = {
    ...
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
    'DEFAULT_VERSION': 'v1',  # 默认的版本
    'ALLOWED_VERSIONS': ['v1', 'v2'],  # 有效的版本
    'VERSION_PARAM': 'version',  # 版本的参数名与URL conf中一致
}
  • urls.py中
urlpatterns = [
    ...
    url(r'^(?P<version>[v1|v2]+)/publishers/$', views.PublisherViewSet.as_view({'get': 'list', 'post': 'create'})),
    url(r'^(?P<version>[v1|v2]+)/publishers/(?P<pk>\d+)/$', views.PublisherViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),

]
  • 我们在视图中可以通过访问 request.version 来获取当前请求的具体版本
    • 然后根据不同的版本来返回不同的内容:
  • 我们可以在视图中自定义具体的行为
    • 下面以不同的版本返回不同的序列化类为例
class PublisherViewSet(ModelViewSet):

    def get_serializer_class(self):
        """不同的版本使用不同的序列化类"""
        if self.request.version == 'v1':
            return PublisherModelSerializerVersion1
        else:
            return PublisherModelSerializer
    queryset = models.Publisher.objects.all()

【2】局部配置

  • 注意
    • 通常我们是不会单独给某个视图设置版本控制的
    • 如果你确实需要给单独的视图设置版本控制
    • 你可以在视图中设置versioning_class属性,如下:
class PublisherViewSet(ModelViewSet):

    ...
    versioning_class = URLPathVersioning

标签:版本控制,不同,视图,Django,v1,Rest,版本,class
From: https://www.cnblogs.com/dream-ze/p/17559516.html

相关文章

  • 【补充】Django缓存与内置信号
    【一】缓存的介绍【1】什么是缓存简单概括就是将对数据库操作查询所得到的数据放入另外一台机器上(缓存)中当用户再次请求时,直接去缓存中拿,避免对数据库的频繁操作,加快数据的显示时间需要知道的是,缓存里面的数据一般都设置有超时时间,缓存一般用在数据变化不大,实时率不高的......
  • postgrest数据库
    PostgREST是一种基于PostgreSQL数据库的RESTfulAPI服务器,PostgREST可以方便地创建和管理RESTfulAPI接口,同时也可以提高开发效率和降低开发成本。目录一、postgrest概述二、postgrest作用三、postgrest特点四、postgrest应用五、部署postgrest六、postgrest命令七、postg......
  • 高性能RestTemplate配置
    简述RestTemplateSpring框架中的RestTemplate是访问Rest服务的客户端底层通过使用java.net包实现创建HTTP请求通过使用ClientHttpRequestFactory指定不同的HTTP请求方式,主要提供了两种实现方式​ SimpleClientHttpRequest(默认)底层使用J2SE通过的方法(java.net包提......
  • docker restart 多個容器
    Dockerrestart多个容器的流程为了实现Dockerrestart多个容器,我们可以按照以下步骤进行操作:步骤描述1找到需要重启的容器2停止容器3重新启动容器下面是每一步具体需要做的操作和相应的代码:步骤1:找到需要重启的容器首先,我们需要确定需要重启的容器的......
  • Django框架学习
    Django框架开发项目的创建1、在终端创建项目打开终端进入某个目录(项目位置)"C:\ProgramFiles\Python37\Scripts\django-admin.exe"startproject项目名称2、在pycharm创建项目3、默认项目的文件介绍app终端创建apppythonmanage.pystartappapp01默认......
  • 关于 SAP ABAP 事务码 SM30 里的 Restrict Data Range
    SAPABAP事务码SM30里的RestrictDataRange区域的Enterconditions和Variant这两个选项有什么作用?SAPABAP中的SM30事务码用于维护表的条目。在使用SM30事务时,RestrictDataRange区域允许用户定义一些限制条件,可以帮助缩小查询或更改的数据范围。这对于大型表......
  • RestKit学习5:Loading Remote Objects
    本系列的前面几篇:RestKit学习1:引用RestKit项目RestKit学习2:使用RestKit发送和接受请求 RestKit学习3:CoreData从模型到实体RestKit学习4:DatabaseSeeding(生成数据库文件)这篇是从服务器的一个json接口直接获得数据,并把数据解析成对象。需要解析的json字符串:{"error":0,"message":"......
  • 鸟类识别系统python+TensorFlow+Django网页界面+卷积网络算法+深度学习模型
    一、介绍鸟类识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Django框架,开发网页端操作平台,实现用户上传一张图片识别其名称。二、效果图片三、演示视频and代码视频+......
  • Clickhouse、Mysql、Presto数据库解析Json数据
    一、Clickhouse解析Json1、visitParamExtractBool(json,name)→提取json中的name字段,返回UInt8,0或1  例:visitParamExtractBool('{"name":true}','name')ASbool2、visitParamExtractInt(json,name)→提取json中的name字段,返回Int型的值  例:visitParamExtractInt......
  • Ubuntu部署django的基础软件安装
    ubuntudjango sudovidjango.sh#インストールのコマンドです。sudoaptinstallgitsudoapt-getinstallapache2apache2-devgdal-binlibgdal-devsudoaptinstalllibapache2-mod-wsgi-py3sudopip3install-yuwsgisudoapt-getinstall-yapache2sudo......