当前位置: 首页 > news >正文

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

目录

一、接口文档的意义

二、OpenAPI 与 Swagger 的概念

三、安装与配置

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

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

定义序列化器

定义视图并添加 Swagger 注解

路由绑定

六、Swagger 与 ReDoc 的区别

1. Swagger UI

2. 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 openapischema_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 serializersclass 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 openapiclass 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, UserInfoViewurlpatterns = [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. 可根据项目需求选择保留或关闭某一种文档
http://www.dtcms.com/a/609764.html

相关文章:

  • Docker K8s VM 简介
  • FPGA教程系列-Vivado中读取ROM中数据
  • 网站怎么添加模块鹿寨建设局网站
  • 响应式外贸网站案例国外ps网站
  • springcloud feign远程调用请求参数对象变成linkhashmap处理
  • “耐达讯自动化Profibus总线光端机在化工变频泵控制系统中的应用与价值解析”
  • centos7.2安装cacti1.2.27
  • 将 vue3 项目打包后部署在 springboot 项目运行
  • 福州短视频seo网站建筑网站首页大图
  • 阿根廷网站后缀毕业设计网站成品
  • 性能相关指标
  • 数据结构--6:优先级队列(堆)
  • ESP32 Wsl2 环境搭建
  • Elasticsearch:如何创建知识库并使用 AI Assistant 来配置连接器
  • Blender学习笔记(04)-- 选中实体的一部分,单独设置颜色
  • 哪个网站做攻略比较好品牌vi设计案例欣赏ppt
  • 珠海市网站建设企业网站编辑给续南明做的封面
  • 国产化Excel开发组件Spire.XLS教程:Python将列表导出为CSV文件(含一维/二维/字典列表)
  • 接口自动化测试框架实战(Pytest+Allure+Excel)
  • 苹果质量检测与分类 - YOLO13结合RFCAConv实现
  • YZ系列工具之YZ09: VBA_Excel之读心术
  • 三芯联动:“通信 + 供电 + 主控”的安全闭环与场景革命
  • EXCEL 数字编码化排序(如部门层级排序)
  • sse,短轮询,长轮询,webSocket
  • 芦笋嫩茎形态分类与识别_YOLO11-C3k2-MambaOut-SFSC模型实现_1
  • 昆明专业网站营销北京工程建设交易平台
  • 衡阳网站搜索引擎优化wordpress如何设水印图片
  • 对Docker部署的MySQL中的数据进行备份恢复
  • AI 时代企业新形态:超级个体与多智能体
  • 夜场酒吧娱乐ktv类企业网站源码网上花店网页制作素材