如何在Django的drf-yasg中调整API端点的显示顺序
调整drf-yasg中API端点的显示顺序
要让Swagger里的端点按你想要的顺序排列,有几个实用的办法:
用标签分组控制顺序
给不同端点设置带排序前缀的标签,Swagger会按标签的字母顺序排列分组,以此实现端点排序:
from drf_yasg.utils import swagger_auto_schema class YourViewSet(viewsets.ViewSet): @swagger_auto_schema(tags=["1-优先展示"]) def number2(self, request): # 你的视图逻辑 pass @swagger_auto_schema(tags=["2-次要展示"]) def number1(self, request): # 你的视图逻辑 pass
要是不想让前缀显示在Swagger页面上,也可以用CSS隐藏标签里的数字前缀,或者用\u0001这类不可见字符当排序标识。
自定义Schema生成器改排序逻辑
继承默认的生成器,重写路径排序规则,完全自定义排序逻辑:
from drf_yasg.generators import OpenAPISchemaGenerator class CustomSchemaGenerator(OpenAPISchemaGenerator): def get_paths(self, endpoints, components, request, public): # 先调用父类方法拿到默认路径字典 paths = super().get_paths(endpoints, components, request, public) # 这里按路径里number后的数字倒序排,你可以改成自己的规则 sorted_items = sorted(paths.items(), key=lambda x: int(x[0].split('/')[-2].replace('number', '')), reverse=True) return dict(sorted_items)
然后在生成Schema视图的时候指定这个自定义生成器:
from drf_yasg.views import get_schema_view from rest_framework import permissions schema_view = get_schema_view( openapi.Info( title="你的API文档", default_version='v1', ), public=True, permission_classes=[permissions.AllowAny], generator_class=CustomSchemaGenerator, # 用自定义的生成器 )
调整URL注册顺序(慎用)
部分drf-yasg版本会按照URL在urls.py里的注册顺序展示端点,你可以把想要靠前的端点URL写在前面:
urlpatterns = [ path('endpoint/number2/', YourViewSet.as_view({'get': 'number2'})), path('endpoint/number1/', YourViewSet.as_view({'get': 'number1'})), ]
不过这个方法不保证所有版本都生效,因为有些版本会强制按路径字母排序,所以优先用前两种方法。
内容的提问来源于stack exchange,提问作者rahnama7m
相关产品推荐
相关产品推荐

