Django集成Swagger全指南:两种实用方案详解

简介: 本文介绍了在 Django 项目中集成 Swagger 的两种主流方案 —— drf-yasg 和 drf-spectacular,涵盖安装配置、效果展示及高级用法,助力开发者高效构建交互式 API 文档系统,提升前后端协作效率。

一、前言

概述

在前后端分离开发中,API 文档的重要性不言而喻。Swagger(现更名为 OpenAPI)作为主流的 API 文档生成工具,能自动生成交互式文档,极大提升开发效率。本文将介绍两种在 Django 项目中集成 Swagger 的实用方案,帮助开发者快速搭建完善的 API 文档系统。

什么是 Swagger/OpenAPI?

Swagger 是一套用于描述、生成、消费和可视化 RESTful API 的规范和工具集,目前已演进为 OpenAPI 规范:

  • Swagger 2.0:支持 WebSockets、OAuth2、文件上传等功能,提升了 API 描述的精确度
  • OpenAPI 3.0:下一代规范,提供更严格的模式验证、更多数据类型支持和更好的扩展性

通过集成 Swagger,开发者可以获得:

  • 自动生成的交互式 API 文档
  • 在线接口调试功能
  • 标准化的 API 描述格式(JSON/YAML)
  • 便于前后端协作和 API 版本管理

两种方案对比

特性 drf-yasg drf-spectacular
规范支持 Swagger 2.0 OpenAPI 3.0
功能丰富度 基础功能完善 高级功能更丰富
可定制性 中等
学习曲线 平缓 稍陡
推荐场景 简单项目快速集成 复杂项目、需要高级定制

二、方案一:使用 drf-yasg(支持 Swagger 2.0)

工具介绍

drf-yasg 是基于 Django REST Framework (DRF) 的 API 文档生成工具,专注于 Swagger 2.0 规范,具有以下特点:

  • 动态生成 Swagger UI,支持多种主题
  • 可自定义文档样式和内容
  • 支持隐藏指定字段、添加额外参数等高级功能

安装步骤

安装

pip install -U drf-yasg

配置settings.py:在 INSTALLED_APPS 中添加相关应用

INSTALLED_APPS = [
   # ...
   'django.contrib.staticfiles',  # 用于提供 Swagger UI 的静态文件
   'drf_yasg',
   # ...
]

配置urls.py:添加 Swagger 相关路由

from django.urls import re_path
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

# 配置 API 文档基本信息
schema_view = get_schema_view(
   openapi.Info(
      title="项目 API",
      default_version='v1',
      description="API 接口文档描述",
      terms_of_service="https://www.example.com/terms/",
      contact=openapi.Contact(email="contact@example.com"),
      license=openapi.License(name="MIT License"),
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),  # 允许任何人访问文档
)

# 添加 URL 路由
urlpatterns = [
   # ...
   # 文档 JSON/YAML 下载
   path('swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
   # Swagger UI 页面
   path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
   # ReDoc 页面
   path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
   # ...
]

查看效果

启动 Django 项目后,通过以下地址访问文档:

  • Swagger UI 界面:http://localhost:8000/swagger/

image-20241009183315554.png

  • ReDoc 界面:http://localhost:8000/redoc/
  • 下载 JSON 格式文档:http://localhost:8000/swagger.json
  • 下载 YAML 格式文档:http://localhost:8000/swagger.yaml

三、方案二:使用 drf-spectacular(支持 OpenAPI 3.0)

工具介绍

drf-spectacular 是新一代 API 文档生成工具,支持 OpenAPI 3.0 规范,具有以下优势:

  • 更强的可扩展性和可定制性
  • 支持客户端代码生成
  • 兼容多种 DRF 插件
  • 提供更丰富的文档装饰器

参考资料: drf-spectacular 官方文档

安装步骤

安装

pip install drf-spectacular
pip install drf-spectacular[sidecar] # 安装内置 UI 资源(推荐)

配置 settings.py:点击查看完整代码

INSTALLED_APPS = [
    # ...
    'drf_spectacular',
    'drf_spectacular_sidecar',  # 内置 UI 资源
    # ...
]

# 配置 DRF
REST_FRAMEWORK = {
   
    # OpenAPI 文档
    'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}

### drf-spectacular OpenAPI 文档配置
SPECTACULAR_SETTINGS = {
   
    "SWAGGER_UI_DIST": "SIDECAR",  # 使用内置 UI
    "SWAGGER_UI_FAVICON_HREF": "SIDECAR",
    "TITLE": "MarsMgn API",
    "DESCRIPTION": "火星信息平台接口文档",
    "VERSION": "1.0.0",
    "SERVE_INCLUDE_SCHEMA": False,  # 不在文档中包含 schema 本身
}

配置 urls.py:点击查看完整代码

from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView

urlpatterns = [
    #...
    # API schema 生成端点
    path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
    # Swagger UI 界面
    path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
    # ReDoc 界面
    path('api/schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'),
    #...
]

查看效果

启动 Django 项目后,通过以下地址访问 Swagger UI 界面:http://127.0.0.1:8000/api/schema/swagger-ui

image-20250722082135270.png

四、drf-spectacular 高级使用技巧

字段注释

文档描述优先从序列化器 / 模型的 help_text 提取:

class SystemPost(models.Model):
    id = models.BigAutoField(primary_key=True, help_text="岗位ID")
    code = models.CharField(
        max_length=64,
        help_text="岗位编码",  # 会显示在文档中
    )

接口说明

使用 @extend_schema 装饰器自定义接口描述:

from drf_spectacular.utils import extend_schema

@extend_schema(summary="创建岗位", description="自定义接口详细说明")
@action(methods=["post"], detail=False, url_path="create")
def create_post(self, request, *args, **kwargs):
    return self.custom_create(request, *args, **kwargs)

接口分组

通过 tags 参数对接口进行分组:

@extend_schema(tags=["管理后台-system-岗位"])
class PostViewSet(CustomViewSet):
    queryset = SystemPost.objects.all()
    filterset_class = SystemPostFilter

请求与响应参数定义

定义响应参数示例

from drf_spectacular.utils import extend_schema, OpenApiResponse
from drf_spectacular.types import OpenApiTypes

@extend_schema(
    responses={
   
        200: OpenApiResponse(
            description="操作成功",
            response={
   
                "type": "object",
                "properties": {
   
                    "code": {
   "type": "integer", "example": 0},
                    "data": {
   "type": "boolean", "example": True},
                    "msg": {
   "type": "string", "example": ""}
                }
            }
        )
    }
)
def delete_post(self, request, *args,**kwargs):
    """删除岗位"""
    return Response({
   "code": 0, "data": True, "msg": ""}, status=200)

您正在阅读的是《Django从入门到实战》专栏!关注不迷路~

相关文章
|
2月前
|
机器学习/深度学习 算法 物联网
面向能效和低延迟的语音控制智能家居:离线语音识别与物联网集成方案——论文阅读
本文提出一种面向能效与低延迟的离线语音控制智能家居方案,通过将关键词识别(KWS)集成至终端设备,结合去中心化Mesh网络与CoAP协议,实现本地化语音处理。相较云端方案,系统能耗降低98%,延迟减少75%以上,显著提升响应速度与能源效率,为绿色智能家居提供可行路径。(236字)
199 17
面向能效和低延迟的语音控制智能家居:离线语音识别与物联网集成方案——论文阅读
编解码 算法 vr&ar
198 0
|
3月前
|
自然语言处理 负载均衡 算法
推理速度提升300%:LLaMA4-MoE的FlashAttention-2集成与量化部署方案
本文详解LLaMA4-MoE模型架构与实现全流程,涵盖语料预处理、MoE核心技术、模型搭建、训练优化及推理策略,并提供完整代码与技术文档,助你掌握大模型MoE技术原理与落地实践。
236 6
|
4月前
|
缓存 人工智能 监控
MCP资源管理深度实践:动态数据源集成方案
作为一名深耕AI技术领域多年的开发者,我见证了从传统API集成到现代化协议标准的演进历程。今天要和大家分享的MCP(Model Context Protocol)资源管理实践,是我在实际项目中积累的宝贵经验。MCP作为Anthropic推出的革命性AI连接标准,其资源管理机制为我们提供了前所未有的灵活性和扩展性。在过去的几个月里,我深度参与了多个企业级MCP项目的架构设计和实施,从最初的概念验证到生产环境的大规模部署,每一个环节都让我对MCP资源管理有了更深刻的理解。本文将从资源生命周期管理的角度出发,详细探讨文件系统、数据库、API等多种数据源的适配策略,深入分析实时数据更新与缓存的最佳实践
139 0
|
4月前
|
人工智能 安全 API
MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
作为一名长期关注AI技术发展的博主摘星,我深刻感受到了当前AI应用集成领域正在经历的巨大变革。随着Anthropic推出的Model Context Protocol(MCP,模型上下文协议)逐渐成熟,我们不得不重新审视传统的系统集成方案。在过去的几年中,REST API凭借其简单易用的特性成为了Web服务的标准选择,GraphQL以其灵活的数据查询能力赢得了前端开发者的青睐,而gRPC则以其高性能的特点在微服务架构中占据了重要地位。然而,当我们将视角转向AI应用场景时,这些传统方案都暴露出了一些局限性:REST API的静态接口设计难以适应AI模型的动态需求,GraphQL的复杂查询机制在处
314 0
MCP vs 传统集成方案:REST API、GraphQL、gRPC的终极对比
|
5月前
|
存储 Kubernetes 监控
Docker与Kubernetes集成挑战及方案
面对这些挑战,并不存在一键解决方案。如同搭建灌溉系统需要考虑多种因素,集成Docker与Kubernetes也需要深思熟虑的规划、相当的技术知识和不断的调试。只有这样,才能建立起一个稳定、健康、高效的Docker-Kubernetes生态,让你的应用像花园中的植物一样繁荣生长。
242 63
|
8月前
|
人工智能 BI API
Dify-Plus:企业级AI管理核弹!开源方案吊打SaaS,额度+密钥+鉴权系统全面集成
Dify-Plus 是基于 Dify 二次开发的企业级增强版项目,新增用户额度、密钥管理、Web 登录鉴权等功能,优化权限管理,适合企业场景使用。
1135 3
Dify-Plus:企业级AI管理核弹!开源方案吊打SaaS,额度+密钥+鉴权系统全面集成
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析
DeepSeek R1 是一款先进的大规模深度学习模型,专为自然语言处理等复杂任务设计。它具备高效的架构、强大的泛化能力和优化的参数管理,适用于文本生成、智能问答、代码生成和数据分析等领域。阿里云平台提供了高性能计算资源、合规与数据安全、低延迟覆盖和成本效益等优势,支持用户便捷部署和调用 DeepSeek R1 模型,确保快速响应和稳定服务。通过阿里云百炼模型服务,用户可以轻松体验满血版 DeepSeek R1,并享受免费试用和灵活的API调用方式。
575 12
|
11月前
|
DataWorks 数据挖掘 大数据
方案实践测评 | DataWorks集成Hologres构建一站式高性能的OLAP数据分析
DataWorks在任务开发便捷性、任务运行速度、产品使用门槛等方面都表现出色。在数据处理场景方面仍有改进和扩展的空间,通过引入更多的智能技术、扩展数据源支持、优化任务调度和可视化功能以及提升团队协作效率,DataWorks将能够为企业提供更全面、更高效的数据处理解决方案。
|
机器学习/深度学习 DataWorks 数据挖掘
基于阿里云Hologres和DataWorks数据集成的方案
基于阿里云Hologres和DataWorks数据集成的方案
241 7