当前位置: 代码网 > it编程>前端脚本>Python > Django集成Swagger的两种实现方案全指南

Django集成Swagger的两种实现方案全指南

2025年07月31日 Python 我要评论
一、前言概述在前后端分离开发中,api 文档的重要性不言而喻。swagger(现更名为 openapi)作为主流的 api 文档生成工具,能自动生成交互式文档,极大提升开发效率。本文将介绍两种在 dj

一、前言

概述

在前后端分离开发中,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-yasgdrf-spectacular
规范支持swagger 2.0openapi 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/

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

四、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集成swagger的两种实现方案全指南的文章就介绍到这了,更多相关django集成swagger内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com