当前位置: 代码网 > it编程>前端脚本>Python > django自动添加接口文档的实现

django自动添加接口文档的实现

2025年03月19日 Python 我要评论
以下是使用 django 和django-rest-swagger(或替代方案drf-yasg)生成 api 接口文档的详细指南。由于django-rest-swagger已停止维护,推荐使用drf-

以下是使用 django 和 django-rest-swagger(或替代方案 drf-yasg)生成 api 接口文档的详细指南。由于 django-rest-swagger 已停止维护,推荐使用 drf-yasg(支持 swagger 2.0 和 openapi 3.0),但两种方法均会说明:

一、方案选择与安装

1. 方案对比

库名维护状态支持规范功能特点
django-rest-swagger已弃用swagger 2.0旧项目兼容,文档生成简单
drf-yasg活跃维护openapi 3.0功能强大,支持更详细的配置

2. 安装推荐库(drf-yasg)

# 安装 drf-yasg(推荐)
pip install drf-yasg

# 或安装旧版 django-rest-swagger(不推荐)
# pip install django-rest-swagger==2.2.0

二、配置 drf-yasg 生成接口文档(推荐)

1. 配置 settings.py

# settings.py
installed_apps = [
    ...
    'rest_framework',
    'drf_yasg',  # 添加 drf-yasg
]

# 可选:配置 drf 的默认权限(按需设置)
rest_framework = {
    'default_permission_classes': [
        'rest_framework.permissions.allowany',
    ]
}

2. 配置 url 路由

# urls.py
from django.urls import path, include
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

# 定义 swagger 文档视图
schema_view = get_schema_view(
    openapi.info(
        title="api 文档",
        default_version='v1',
        description="项目接口文档",
        terms_of_service="https://example.com/terms/",
        contact=openapi.contact(email="contact@example.com"),
        license=openapi.license(name="mit license"),
    ),
    public=true,
    permission_classes=(permissions.allowany,),  # 控制文档访问权限
)

urlpatterns = [
    # swagger 文档路由
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='swagger-ui'),
    path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='redoc'),
    
    # 其他 api 路由
    path('api/', include('myapp.urls')),
]

3. 为视图添加文档注释

在视图(如 views.py)中使用装饰器或 yaml 注释描述接口:

from drf_yasg.utils import swagger_auto_schema
from rest_framework.views import apiview
from rest_framework.response import response

class userlistview(apiview):
    @swagger_auto_schema(
        operation_description="获取用户列表",
        manual_parameters=[
            openapi.parameter(
                'page', 
                openapi.in_query, 
                description="页码", 
                type=openapi.type_integer
            ),
        ],
        responses={200: '成功获取用户列表'}
    )
    def get(self, request):
        return response({"users": []})

4. 访问文档

• swagger ui: http://localhost:8000/swagger/• redoc: http://localhost:8000/redoc/

三、使用旧版 django-rest-swagger(不推荐)

1. 配置 settings.py

# settings.py
installed_apps = [
    ...
    'rest_framework',
    'rest_framework_swagger',  # 添加 django-rest-swagger
]

# 配置 swagger 设置
swagger_settings = {
    'security_definitions': {
        'basic': {
            'type': 'basic'
        }
    },
    'use_session_auth': false,  # 是否启用 django 的 session 认证
}

2. 配置 url 路由

# urls.py
from django.urls import path
from rest_framework.schemas import get_schema_view
from rest_framework_swagger.renderers import swaggeruirenderer, openapirenderer

schema_view = get_schema_view(
    title="api 文档",
    renderer_classes=[openapirenderer, swaggeruirenderer]
)

urlpatterns = [
    path('swagger/', schema_view, name='swagger'),
    path('api/', include('myapp.urls')),
]

3. 为视图添加注释

在视图类或函数中使用文档字符串(yaml 格式):

class userlistview(apiview):
    def get(self, request):
        """
        获取用户列表

        ---
        parameters:
            - name: page
              in: query
              type: integer
              required: false
              description: 页码
        responses:
            200:
                description: 成功返回用户列表
        """
        return response({"users": []})

4. 访问文档

• 访问 http://localhost:8000/swagger/

四、常见问题与优化

1. 文档不显示接口

• 原因: 视图未继承 apiview 或未配置路由。
• 解决: 确保所有接口使用 drf 的视图类(如 apiviewviewset),并正确注册到路由。

2. 认证配置

• 场景: 需要登录才能访问 swagger 文档。
• 配置(在 settings.py 中):

swagger_settings = {
    'login_url': '/admin/login/',  # 登录地址
    'logout_url': '/admin/logout/',
    'use_session_auth': true,
}

3. 自定义文档样式

• 方法: 覆盖默认模板或使用 drf-yasg 的扩展参数:

schema_view = get_schema_view(
    ...
    patterns=[...],  # 指定要包含的路由
    generator_class='myapp.schemas.customschemagenerator',  # 自定义生成器
)

4. 隐藏特定接口

• 使用 drf_yasg:

@swagger_auto_schema(auto_schema=none)
def my_view(request):
    ...

五、总结

推荐方案: 使用 drf-yasg,功能更强大且维护活跃。

核心步骤:

  • 安装库并配置 settings.py 和 urls.py
  • 通过装饰器或注释为视图添加接口描述。
  • 访问 /swagger/ 查看文档。
    • 注意事项:
    • 确保视图继承自 drf 的基类(如 apiview)。
    • 若接口涉及认证(如 jwt),需在文档中配置安全策略。

到此这篇关于django自动添加接口文档的实现的文章就介绍到这了,更多相关django自动接口文档内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

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

发表评论

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