Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自动记录我的RESTAPI_Python_Django - Fatal编程技术网

Python 自动记录我的RESTAPI

Python 自动记录我的RESTAPI,python,django,Python,Django,我正在尝试从代码中为我的应用程序支持的所有URL自动创建文档。我们完全使用客户端MVC,因此支持的每个URL本质上都是UI的RESTAPI。有没有一种简单的方法可以从这些URL生成文档 现在我写了这个小模块,但是我正在寻找比这个更好的方法。如果类似的东西已经存在,我不想重新发明轮子 更新:注意,目的是为网站消费者提供公共文档,而不是供内部使用。在这方面,对于每个URL,我们需要记录: -反应如何,, -接受哪些参数, -如果URL响应GET/POST或两者,等等 某些像(^$)这样简单地重定向到

我正在尝试从代码中为我的应用程序支持的所有URL自动创建文档。我们完全使用客户端MVC,因此支持的每个URL本质上都是UI的RESTAPI。有没有一种简单的方法可以从这些URL生成文档

现在我写了这个小模块,但是我正在寻找比这个更好的方法。如果类似的东西已经存在,我不想重新发明轮子

更新:注意,目的是为网站消费者提供公共文档,而不是供内部使用。在这方面,对于每个URL,我们需要记录: -反应如何,, -接受哪些参数, -如果URL响应GET/POST或两者,等等

某些像(^$)这样简单地重定向到主页的URL不应该被记录,所以我也需要一些排除机制

from django.core.management.base import BaseCommand
from django.conf import settings


class Command(BaseCommand):
''' Generates documentation for the URLs.  For each URL includes the documentation from
the callback implementing the URL and prints the default arguments along with the URL pattern and name'''

    def handle(self, *args, **options):
        url_module = None
        exec 'import '+settings.ROOT_URLCONF+'; url_module='+settings.ROOT_URLCONF
        doc = file('doc.html','w')
        doc.write("<table border=1 cellspacing=0 cellpadding=5>")
        doc.write("<tr><th>URL Pattern<th>Name<th>Documentation<th>Parameters")
        for x in url_module.urlpatterns:
            doc.write("<tr>")
            doc.write("<td>")
            doc.write(x._regex)
            doc.write("<td>")
            doc.write(str(x.name))
            try:
                documentation = str(x.callback.__doc__)
                doc.write("<td><pre>")
                doc.write(documentation)
                doc.write("</pre>")
            except:
                doc.write("<td> Unable to find module")
            doc.write("<td>")
            doc.write(str(x.default_args))
        doc.write("</table>")
        doc.close()
来自django.core.management.base import BaseCommand的

从django.conf导入设置
类命令(BaseCommand):
''为URL生成文档。对于每个URL,都包含来自
实现URL并打印默认参数以及URL模式和名称“”的回调
def句柄(自身、*参数、**选项):
url\u模块=无
exec“import”+settings.ROOT_URLCONF+;url_module='+settings.ROOT_URLCONF
doc=文件('doc.html','w')
文件编号(“”)
doc.write(“URL模式名称文档参数”)
对于url_module.urlpatterns中的x:
文件编号(“”)
文件编号(“”)
文件写入(x.\U正则表达式)
文件编号(“”)
文件写入(str(x.name))
尝试:
documentation=str(x.callback.\uuuu doc\uuuuu)
文件编号(“”)
文件编写(文档)
文件编号(“”)
除:
单据写入(“找不到模块”)
文件编号(“”)
文件写入(str(x.default_args))
文件编号(“”)
文件关闭()

您可以从根模块遍历URL模式,并像以前一样内省视图函数对象以获取文档数据,但我更愿意编译文档

不过,我还是建议你雇用我。您可能需要记录的不仅仅是您的端点(使用条款、隐私策略、身份验证、yadda-yadda),您还可以编写自己的文档来公开一个指令,您可以在一个文档中调用该指令来完成您在这里所做的工作


或者,您可以简单地避免将其完全工程化:手动管理Sphinx文档,创建Github存储库,并在其上托管文档

如果有人感兴趣,这只是最后的更新


我们最终将我的代码片段用于内部目的。我们已经决定冒险进入Sphinx并使用它,当我们在项目结束时创建开发者指南时,当我们准备好公开测试版时,因为它需要一些时间和投资用于学习、物流等。

,您可以将完整的项目文档添加到您的url文档当然。然而,这里的目的是创建文档,我们可以为我们网站的所有外部消费者发布。为了实现这一目标,我宁愿不发布我们所有代码的文档。看来我还有很多东西要学:-(来自java世界的javadoc似乎简单得多。我不知道你是否注意到了,但Sphinx是Django的作者。对于该网站,他们实际上开发了一个定制,可以动态地将来自源代码的文档呈现在存储库中。它的美妙之处在于,它只需要几十行代码欢迎来到Python生态系统!