当前位置: 首页 > news >正文

[python]在drf中使用drf_spectacular

安装drf_spectacular

文档

pypi链接:https://pypi.org/project/drf-spectacular/

文档链接:https://drf-spectacular.readthedocs.io/en/latest/readme.html

安装步骤

  1. 在环境中添加
pip install drf-spectacular
  1. 在setting的INSTALLED_APPS中添加
INSTALLED_APPS = [# ALL YOUR APPS'drf_spectacular',
]
  1. 在setting的REST_FRAMEWORK中添加
REST_FRAMEWORK = {# YOUR SETTINGS'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
  1. 根据实机情况填写setting中的SPECTACULAR_SETTINGS,此内容为添加
SPECTACULAR_SETTINGS = {"TITLE": "Your API","DESCRIPTION": "API documentation","VERSION": "1.0.0",# "SERVE_INCLUDE_SCHEMA": True,"SWAGGER_UI_DIST": "/static/swagger-ui-dist/",  # 本地静态文件路径"SWAGGER_UI_FAVICON_HREF": "/static/swagger-ui-dist/favicon-32x32.png",  # 本地图标路径"REDOC_DIST": "redoc-dist",  # 如果需要 Redoc
}
  1. url.py文件中添加
urlpatterns = [# YOUR PATTERNSpath('api/schema/', SpectacularAPIView.as_view(), name='schema'),# Optional UI:path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
]

解决UI在线无法使用的问题

下载https://github.com/swagger-api/swagger-ui中的release内容

并根据第四步中的SWAGGER_UI_DIST内容,把release的dist内容放到具体的路径上.


对接口进行说明

先展示一个实例

class UserViewSets(viewsets.ModelViewSet):queryset = user.objects.all()serializer_class = UserSerializersfilter_backends = [DjangoFilterBackend, OrderingFilter]ordering_fields = ["id"]filterset_fields = ["first_name"]# /user/search/?username=xxx# /user/search/?first_name=xxx@extend_schema(description="根据工号或者姓名查找用户",parameters=[OpenApiParameter(name="username",description="员工工号",required=False,type=OpenApiTypes.STR,location=OpenApiParameter.QUERY,default="358256",examples=[OpenApiExample(name="第一页", value=1, description="获取第一页数据"),OpenApiExample(name="第五页", value=5, description="获取第五页数据"),],),OpenApiParameter(name="first_name",description="员工姓名",required=False,type=OpenApiTypes.STR,location=OpenApiParameter.QUERY,default="谢斯",),],summary="用户详情接口",)@action(detail=False, methods=["get"], url_path="search")def search(self, request):username = request.query_params.get("username", None)first_name = request.query_params.get("first_name", None)queryset = self.get_queryset()if username:queryset = queryset.filter(username=username)if first_name:queryset = queryset.filter(first_name=first_name)serializer = self.get_serializer(queryset, many=True)return Response(serializer.data)

在这里插入图片描述

需要注意的点

在view.py文件中需要引入对应的内容

from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes, OpenApiExample

介绍SPECTACULAR_SETTINGS

配置项类型默认值描述
基础配置
TITLEstr“API”API 文档的标题。
DESCRIPTIONstr“”API 文档的描述(Markdown 支持)。
VERSIONstr“1.0.0”API 的版本号。
SERVE_URLCONFstr当前 urls.py定义用于生成文档的 URL 配置。
SERVE_PATHstr“/schema/”OpenAPI Schema 的访问路径。
SERVE_INCLUDE_SCHEMAboolTrue是否在 Swagger 页面中显示 Schema 链接。
接口过滤与路径匹配
配置项 类型 默认值 描述
SCHEMA_PATH_PREFIXstrr"^api/"匹配生成文档的 URL 路径(正则表达式)。
SCHEMA_PATH_PREFIX_TRIMboolFalse是否移除路径前缀(如 /api/)以简化文档路径。
SCHEMA_COERCE_PATH_PKboolFalse将路径中的 pk 强制转换为整数类型。
SCHEMA_URL_PREFIXstr“”为所有接口路径添加前缀(如 /v1/)。
认证与安全策略
AUTHENTICATION_CLASSESlist项目默认的 REST_FRAMEWORK.AUTHENTICATION_CLASSES指定需要包含在文档中的认证类(如 JWT, Token)。
SECURITY_DEFINITIONSdict{}定义安全策略(如 OAuth2、JWT)。
SECURITY_REQUIREMENTSlist[]指定默认的安全要求(如 [“BearerAuth”])。
组件与扩展
COMPONENT_SPLIT_REQUESTboolFalse是否将请求和响应拆分为独立的组件(适用于复杂场景)。
ENUM_NAME_OVERRIDESdict{}覆盖枚举字段的名称(如 ChoiceField)。
TAGSlist从视图中自动提取手动定义接口标签(分组)。
PREPROCESSING_HOOKSlist[]在生成 Schema 前自定义处理函数(如修改参数)。
POSTPROCESSING_HOOKSlist[]在生成 Schema 后自定义处理函数(如添加注释)。
UI 显示优化
SWAGGER_UI_SETTINGSdict{}自定义 Swagger UI 的行为(如主题、操作排序)。
REDOC_SETTINGSdict{}自定义 ReDoc 的行为(如样式、操作排序)。
SERVE_PUBLICboolTrue是否允许匿名用户访问文档页面。
高级配置
APPEND_COMPONENTSdict{}手动添加 OpenAPI 组件(如自定义请求体格式)。
POSTPROCESSING_FILTERcallableNone对生成的 Schema 进行过滤或修改。
EXTENSIONSdict{}注册自定义扩展(如支持 GraphQL)。
http://www.dtcms.com/a/273971.html

相关文章:

  • FPGA通信设计十问
  • 液冷智算数据中心崛起,AI算力联动PC Farm与云智算开拓新蓝海(二)
  • MyBatis02-mybatis-config.xml配置文件讲解
  • Django--02模型和管理站点
  • 链表算法之【判断链表中是否有环】
  • 从零实现一个GPT 【React + Express】--- 【3】解析markdown,处理模型记忆
  • RapidFuzz-CPP:高效字符串相似度计算的C++利器
  • ICLR 2025 | InterpGN:时间序列分类的透明革命,Shapelet+DNN双引擎驱动!
  • 【TCP/IP】18. 因特网服务质量
  • 输入流挂起
  • Promise :then 与 catch 同时触发
  • AIStarter新版重磅来袭!永久订阅限时福利抢先看
  • 精准安装追踪:openinstall 如何让邀请码绑定更智能?
  • 瑞士四种官方语言探秘:多元文化的和谐交融
  • 用Netplan配置网桥bridge笔记250711
  • 飞算 JavaAI:开启 Java 开发新时代
  • 单链表,咕咕咕
  • 使用 Python 对本地图片进行图像分类
  • 镜像(Mirror/Image)
  • 飞算JavaAI:革新Java开发的智能助手
  • 100G系列光模块产品与应用场景介绍
  • 7.12 note
  • 【实时Linux实战系列】硬实时与软实时设计模式
  • Vue3 Pinia
  • 深入MyBatis:CRUD操作与高级查询实战
  • mac电脑的usr/libexec目录是干什么的?
  • 「Linux命令基础」文本模式系统关闭与重启
  • Linux 内存管理之LRU链表
  • 蓝牙协议栈高危漏洞曝光,攻击可入侵奔驰、大众和斯柯达车载娱乐系统
  • HTTPS安全机制:从加密到证书全解析