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. 可根据项目需求选择保留或关闭某一种文档
相关推荐
生信大表哥1 天前
单细胞测序分析(五)降维聚类&数据整合
linux·python·聚类·数信院生信服务器
seeyoutlb1 天前
微服务全局日志处理
java·python·微服务
ada7_1 天前
LeetCode(python)——148.排序链表
python·算法·leetcode·链表
岁月宁静1 天前
LangChain + LangGraph 实战:构建生产级多模态 WorkflowAgent 的完整指南
人工智能·python·agent
第二只羽毛1 天前
主题爬虫采集主题新闻信息
大数据·爬虫·python·网络爬虫
plmm烟酒僧1 天前
TensorRT 推理 YOLO Demo 分享 (Python)
开发语言·python·yolo·tensorrt·runtime·推理
天才测试猿1 天前
Postman中变量的使用详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
帕巴啦1 天前
Arcgis计算面要素的面积、周长、宽度、长度及最大直径
python·arcgis
AI小云1 天前
【数据操作与可视化】Matplotlib绘图-生成其他图表类型
开发语言·python·matplotlib
MediaTea1 天前
Python 第三方库:plotnine(类 ggplot 的 Python 数据可视化库)
开发语言·python·信息可视化