Django - DRF - 版本控制(配合路由的反向解析获取链接)

本文详细介绍了在RESTful API中实现版本控制的多种策略,包括基于URL路径、查询参数、请求头、主机名及命名空间的方式,并提供了具体的配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、版本控制 - 用于控制路由的版本跳转

1-1 URLPathVersioning - 基于url的正则方式:/v1/users/

1-1-1 路由配置

1-1-2 视图函数

1-1-3 setting配置

1-2 QueryParameterVersioning - 基于url的get 传参方式:/users?version=v1

1-1-1 路由设计

1-1-2 setting配置

 1-1-3 视图函数

1-3 AcceptHeaderVersioning - 基于请求头方式:Accept: application/json; version=1.0

1-4 HostNameVersioning - 基于主机名:v1.example.com

1-5 NamespaceVersioning - 基于路由系统:example.com/v1/users/

二、使用配置

2-1 局部配置 - CBV内 versioning_class

2-2 全局配置 - setting配置


一、版本控制 - 用于控制路由的版本跳转

1-1 URLPathVersioning - 基于url的正则方式:/v1/users/

1-1-1 路由配置

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views

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

1-1-2 视图函数

from rest_framework.pagination import CursorPagination
from rest_framework.versioning import URLPathVersioning


class Book(ViewSetMixin, APIView):
    versioning_class = URLPathVersioning

    def get_all(self, request,*args,**kwargs):
        # 版本可以从request.version内调取
        print(request.version)

        # django 的路由反向解析
        # from django.urls import reverse
        # url2=reverse(viewname='ttt',kwargs={'version':request.version})
        # print(url2)

        # 提供给咱的解析
        url2=request.versioning_scheme.reverse('ttt',request=request)
        print(url2)

        book_list = models.Book.objects.all()
        # 实例化产生一个加密分页对象
        page = CursorPagination()
        page.ordering = 'nid'
        page.page_size=2

        page_list = page.paginate_queryset(book_list, request, self)
        ser = mySer.BookSerializer(instance=page_list, many=True)
        return page.get_paginated_response(ser.data)

1-1-3 setting配置

REST_FRAMEWORK = {
    'VERSION_PARAM': 'version',
    'DEFAULT_VERSION': 'v1',
    'ALLOWED_VERSIONS': ['v1', 'v2'],
}

 

 

1-2 QueryParameterVersioning - 基于url的get 传参方式:/users?version=v1

1-1-1 路由设计

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^books/', views.Book.as_view({'get':'get_all'}),name='ttt'),

]

1-1-2 setting配置

REST_FRAMEWORK = {
    'VERSION_PARAM': 'version',
    'DEFAULT_VERSION': 'v1',
    'ALLOWED_VERSIONS': ['v1', 'v2'],
}

 1-1-3 视图函数

1-3 AcceptHeaderVersioning - 基于请求头方式:Accept: application/json; version=1.0

1-4 HostNameVersioning - 基于主机名:v1.example.com

1-5 NamespaceVersioning - 基于路由系统:example.com/v1/users/

二、使用配置

2-1 局部配置 - CBV内 versioning_class

2-2 全局配置 - setting配置

REST_FRAMEWORK = {
    # 'DEFAULT_VERSIONING_CLASS':'rest_framework.versioning.URLPathVersioning',
    'VERSION_PARAM':'version', # get传输时候的key名,必须和有名分组的名字相对应
    'DEFAULT_VERSION':'v1', # 默认版本
    'ALLOWED_VERSIONS': ['v1', 'v2'], # 可选择的版本
}

### Django REST framework介绍 Django REST framework (DRF) 是一个用于构建 Web API 的高级、简洁且易于使用的 Python 库,其基于著名的 Web 框架 Django 创建而成[^3]。 DRF 提供了一系列强大的工具和约定,旨在简化 HTTP 请求和响应的处理过程,并能够方便地将数据序列化为 JSON 格式。 #### 主要功能 - **资源定义(Resources)**:允许开发者清晰地定义应用程序中的各种资源及其交互方式- **视图集(ViewSets)**:提供了更加模块化的接口设计方法,使得操作逻辑与 URL 路由之间的映射更为直观简单[^5]。 - **序列化器(Serializers)**:负责把复杂的数据库模型实例转换成原生 Python 数据类型以便进一步渲染成 JSON 或其他格式;同时也支持反向解析输入的数据并将其保存回数据库中。 - **认证和授权**:内置多种认证机制(如基本认证、令牌认证),并且可以通过自定义类轻松扩展新的认证方式。此外还具备完善的权限控制系统,确保只有经过适当授权的用户才能访问特定资源或执行某些动作[^4]。 - **分页和过滤**:除了默认提供的简单分页外,还可以借助第三方库 `django-filter` 实现复杂条件下的记录筛选功能[^1]。 ```python from rest_framework.pagination import PageNumberPagination from django_filters.rest_framework import DjangoFilterBackend class StandardResultsSetPagination(PageNumberPagination): page_size = 10 page_size_query_param = 'page_size' max_page_size = 100 class ExampleViewSet(viewsets.ModelViewSet): queryset = YourModel.objects.all() serializer_class = YourSerializer pagination_class = StandardResultsSetPagination filter_backends = [DjangoFilterBackend] filterset_fields = ['field_name'] ``` 通过上述特性组合应用,DRF 成为了开发人员用来快速搭建高性能 RESTful APIs 的理想选择之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值