Django 接口文档生成:Swagger 与 ReDoc 全面说明

目录

一、接口文档的意义

[二、OpenAPI 与 Swagger 的概念](#二、OpenAPI 与 Swagger 的概念)

三、安装与配置

[四、在 Django 中添加 Swagger 文档入口](#四、在 Django 中添加 Swagger 文档入口)

[五、编写示例接口,展示在 Swagger 中](#五、编写示例接口,展示在 Swagger 中)

定义序列化器

[定义视图并添加 Swagger 注解](#定义视图并添加 Swagger 注解)

路由绑定

[六、Swagger 与 ReDoc 的区别](#六、Swagger 与 ReDoc 的区别)

[1. Swagger UI](#1. Swagger UI)

[2. ReDoc](#2. ReDoc)

[七、如不需要 ReDoc,可禁用](#七、如不需要 ReDoc,可禁用)

八、总结


本文介绍 Django 项目中使用 drf_yasg 自动生成接口文档的过程,包括 Swagger UI 与 ReDoc 的作用、区别和配置方式。文章适合对接口文档不熟悉的开发者阅读。


一、接口文档的意义

在前后端分离开发中,前端需要依赖后端提供的 API 才能与服务器交互。为了明确每个接口的作用、参数格式、返回值结构,需要一份可读、可维护的接口文档。

接口文档的核心目的包括:

  1. 明确接口地址、请求方式
  2. 展示参数格式、字段含义、是否必填
  3. 指明响应结构
  4. 帮助前后端对齐接口规范
  5. 提供调试入口,提高开发效率

为了解决传统手写文档易过时、维护困难的问题,可以使用自动化工具生成 API 文档。


二、OpenAPI 与 Swagger 的概念

OpenAPI 是一种接口描述规范,类似"文档格式标准"。

Swagger 是一套围绕 OpenAPI 的工具,用于:

  • 生成可视化接口文档页面
  • 提供调试界面
  • 格式化展示参数和返回值结构

在 Django 中,常用的库是 drf_yasg。它的作用是:

  • 自动读取 Django REST Framework 的视图、序列化器
  • 自动生成 OpenAPI 格式文档
  • 自动生成 Swagger UI 和 ReDoc 文档页面

三、安装与配置

安装依赖:

复制代码
pip install drf_yasg djangorestframework

在 Django settings 中启用:

复制代码
INSTALLED_APPS = [
    ...
    "rest_framework",
    "drf_yasg",
]

四、在 Django 中添加 Swagger 文档入口

在项目根目录的 urls.py 中添加如下配置:

复制代码
from django.contrib import admin
from django.urls import path, re_path, include
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
    openapi.Info(
        title="项目接口文档",
        default_version='v1',
        description="自动生成的 API 文档示例",
    ),
    public=True,
    permission_classes=(permissions.AllowAny,),
)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('api.urls')),

    # Swagger UI 文档
    re_path(r'^swagger/$', schema_view.with_ui('swagger', cache_timeout=0), name='swagger-ui'),

    # ReDoc 文档
    re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0), name='redoc'),
]

启动 Django 服务器后,你将得到两种文档:

  1. Swagger UI
    http://127.0.0.1:8000/swagger/
  2. ReDoc
    http://127.0.0.1:8000/redoc/

五、编写示例接口,展示在 Swagger 中

定义序列化器

复制代码
# api/serializers.py
from rest_framework import serializers

class LoginSerializer(serializers.Serializer):
    username = serializers.CharField()
    password = serializers.CharField()

class UserSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    username = serializers.CharField()
    email = serializers.EmailField()

定义视图并添加 Swagger 注解

复制代码
# api/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from drf_yasg.utils import swagger_auto_schema
from .serializers import LoginSerializer, UserSerializer
from drf_yasg import openapi

class UserLoginView(APIView):

    @swagger_auto_schema(
        operation_description="用户登录接口",
        request_body=LoginSerializer,
        responses={200: openapi.Response(
            "成功",
            schema=openapi.Schema(
                type=openapi.TYPE_OBJECT,
                properties={
                    'token': openapi.Schema(type=openapi.TYPE_STRING)
                }
            )
        )},
    )
    def post(self, request):
        return Response({"token": "fake_token"})


class UserInfoView(APIView):

    @swagger_auto_schema(
        operation_description="获取用户信息",
        responses={200: UserSerializer()}
    )
    def get(self, request, uid):
        return Response({
            "id": uid,
            "username": "tom",
            "email": "tom@example.com"
        })

路由绑定

复制代码
# api/urls.py
from django.urls import path
from .views import UserLoginView, UserInfoView

urlpatterns = [
    path('login/', UserLoginView.as_view()),
    path('user/<int:uid>/', UserInfoView.as_view()),
]

访问 /swagger/ 即可看到自动生成的接口文档,包括参数、返回格式及在线调试功能。


六、Swagger 与 ReDoc 的区别

drf_yasg 自动生成两种文档页面,各有用途:

1. Swagger UI

地址:/swagger/

特点:

  • 支持在线调试
  • 页面偏技术化
  • 功能较多
  • 前后端开发人员适用

2. ReDoc

地址:/redoc/

特点:

  • 页面结构更简洁
  • 更适合作为正式接口说明文档
  • 不提供在线调试按钮
  • 更适合第三方阅读

两者均基于同一份 OpenAPI 文档,只是展示方式不同。


七、如不需要 ReDoc,可禁用

只需在 url 配置中删除:

复制代码
re_path(r'^redoc/$', schema_view.with_ui('redoc', cache_timeout=0)),

即可关闭 ReDoc 页面。


八、总结

  1. Django 使用 drf_yasg 可以自动生成接口文档
  2. Swagger UI 提供调试功能
  3. ReDoc 提供更简洁的接口阅读体验
  4. 两者都来自同一份 OpenAPI 文档
  5. 文档内容根据 serializer 和 view 自动同步更新
  6. 可根据项目需求选择保留或关闭某一种文档
相关推荐
天衍四九-2 分钟前
第一章:从 LLM 到 Agent —— DeepSeek Harness 入门
网络·数据库·人工智能·python
529宝宝起名网4 分钟前
用 Python 实现名字寓意评分算法:基于 NLP 语义分析的名字内涵深度评估
python·算法·自然语言处理
2601_962298679 分钟前
Python:对象缓存优化机制(CPython)
python·性能优化·内存优化·cpython·对象缓存
枫彩1 小时前
A股数据源怎么选?用 Python 验收 AI 复盘的日期与明细
python·ai agent·股票数据·mcp
2601_962382431 小时前
Python 代码不可不知的函数式编程技术
python·函数式编程·高阶函数·嵌套函数·头等函数
2601_962078031 小时前
Python办公自动化与数据分析实战 培训班2021年
python·数据分析·办公自动化·自动化办公·实战演练
用户938515635072 小时前
Text2SQL 实战:用 DeepSeek 大模型实现自然语言查询 SQLite 数据库
python·sqlite
2601_962099682 小时前
Python环境下中文分词实现与应用探索
python·自然语言处理·中文分词·jieba·开源社区
2601_966949652 小时前
批量获取多只股票五档盘口的极简方案:QuantDash Python SDK 实战指南
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
用户019027581612 小时前
如何用 Python 监控 A 股涨停跌停与封板/炸板?
python