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

[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.xdnf.cn/news/15111.html

相关文章:

  • 卢比危机下的金融破局:科伦坡交易所技术升级作战图
  • SpringBoot JWT
  • NFS文件存储及论坛项目搭建(php)
  • Web攻防-SSTI服务端模版注入利用分类语言引擎数据渲染项目工具挖掘思路
  • MCU芯片内部的ECC安全机制
  • OpenCV图像基本操作:读取、显示与保存
  • 《数据库》MySQL备份回复
  • AI加持的开源知识库新秀:PandaWiki,如何用它打造智能化文档系统?
  • 新作品:吃啥好呢 - 个性化美食推荐
  • [面试] 手写题-爬楼梯,斐波那契数列
  • 利用Claude code,只用文字版系统设计大纲,就能轻松实现系统~
  • Kafka——应该选择哪种Kafka?
  • 京东携手HarmonyOS SDK首发家电AR高精摆放功能
  • 【深度学习新浪潮】图像生成有哪些最新进展?
  • 光电耦合器在电冰箱开关电源的应用
  • pandas销售数据分析
  • Cesium实战:交互式多边形绘制与编辑功能完全指南(最终修复版)
  • 前端面试专栏-算法篇:23. 图结构与遍历算法
  • Java(7.11 设计模式学习)
  • python的社区残障人士服务系统
  • Grok 4全面解析:马斯克的多智能体AI如何颠覆技术边界
  • 格式规范公文处理助手:一键排版 标题 / 正文 / 页码一键调,Word 脚本自定义
  • 嵌入式学习笔记--MCU阶段--day03中断
  • 网安系列【16】之Weblogic和jboss漏洞
  • 二层环路避免-STP技术
  • Transformer架构:结构介绍
  • STM32F103C8T6单片机内部执行原理及启动流程详解
  • 使用Tensorflow和CNN进行猫狗图片训练的实战总结
  • 【CF】⭐Day96——2025武汉ICPC(AILF)
  • MyBatis插件机制揭秘:从拦截器开发到分页插件实战