首页 > 解决方案 > 生成 API 文档 - 不使用 Django Rest

问题描述

我正在开发一个不使用 Django Rest 的 Django 项目。

在此代码库之上,我正在尝试构建一个框架来自动生成 swagger 文档。

从这个SO Post我可以得到可用的 URL:

from django.urls import get_resolver
urls = get_resolver().reverse_dict

urls是 a MultiValueDict,这里是 Dict 中的前几项:

MultiValueDict: {
   <function create_demo at 0x10f6a3820>: [(
    [('api/v1/create-demo', [])], 
    'api/v1//create\\-demo$', {}, {}
   )], 
   'create_demo': [(
    [('api/v1/create-demo', [])], 
    'api/v1/create\\-demo$', {}, {}
   )], 
   <function users_detail at 0x10f67d280>: [(
    [('api/v1/users/users/%(user_id)s', ['user_id'])], 
    'api/v1/users/users/(?P<user_id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$', {}, {'user_id': <django.urls.converters.UUIDConverter object at 0x10bc3c6a0>}
   )], 
   'users_detail': [(
    [('api/v1/users/users/%(user_id)s', ['user_id'])], 
    'api/v1/users/users/(?P<user_id>[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$', {}, {'user_id': <django.urls.converters.UUIDConverter object at 0x10bc3c6a0>}
   )]

看起来这个 dict 的键是对视图函数的引用,后跟该函数的 url“名称”,值是包含相对 url 路径和参数的列表。

我的想法是遍历每个函数引用并为 swagger doc 创建一个条目。
在每个视图函数中,我将定义名为 RequestSchema 和 ResponseSchema 的变量。
理想情况下,我可以从函数引用中访问这些变量,并将该数据也添加到 swagger 文档中。

目标是让文档在视图功能更新时保持最新。即,如果我为特定功能更新 ResponseSchema,那将自动反映在文档中。

我的问题是:

  1. 这种方法是否有任何意义,还是有更好的方法来解决这个问题?
  2. 我不想重新发明轮子,是否有一个包已经做了类似的事情?
    • 切换到 Django Rest 不是一种选择
  3. 如果没有,我可以/我如何访问函数中定义的 RequestSchemas 和 ResponseSchemas vars,当循环从 URLResolver 返回的函数引用时?

标签: pythondjangoswagger

解决方案


推荐阅读