当前位置: 首页 > 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.lryc.cn/news/585183.html

相关文章:

  • 持续集成 简介环境搭建
  • STM32G473串口通信-USART/UART配置和清除串口寄存器状态的注意事项
  • Rail开发日志_5
  • 基于Selenium和FFmpeg的全平台短视频自动化发布系统
  • Maven下载与配置对Java项目的理解
  • RISC-V:开源芯浪潮下的技术突围与职业新赛道 (三)RISC-V架构深度解剖(下)
  • SpringBoot 使用注解获取配置文件中的值
  • c/c++拷贝函数
  • Claude Code是什么?国内如何使用到Claude Code?附国内最新使用教程
  • FlashBots 之 MEV-boost
  • 决策树算法在医学影像诊断中的广泛应用
  • 用Python和OpenCV从零搭建一个完整的双目视觉系统(六 最终篇)
  • CentOS 安装 Redis 简明指南
  • 【Centos】Redis Cluster 集群部署图文步骤
  • VMware安装Centos 7
  • 包稳定的Docker 安装方式(CentOS)
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(上)
  • 意识边界的算法战争—脑机接口技术重构人类认知的颠覆性挑战
  • C++(STL源码刨析/List)
  • 锂电池自动化生产线的现状与发展
  • 【Java】【力扣】102.二叉树层序遍历
  • 如何将ONLYOFFICE文档集成到Go网页应用中
  • css——width: fit-content 宽度、自适应
  • VR带看:开启多元领域新视界
  • VR协作海外云:跨国企业沉浸式办公解决方案
  • UDP服务器的优缺点都包含哪些?
  • 镜像(Mirror/Image)
  • 如何准确查看服务器网络的利用率?
  • K8s Service 终极解析:源码、性能、故障排查全攻略
  • 深入解码 Docker 镜像与容器的奇妙世界