在django中处理文档和结构

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【6月更文挑战第11天】该文介绍了如何使用Django REST框架和相关工具创建和记录API文档。并强调了文档在API开发中的重要性,并鼓励使用自动化工具确保文档的准确性和时效性。

1 对接文档

程序员们通常使用哪个方式沟通?本文首先讨论了为何需要清晰的API文档,特别是当API使用者与构建者不同时。然后提到了Schema作为机器可读的文档格式,概述API端点、URL和HTTP动词。

question_ans.png

文章详细阐述了如何利用Django REST框架的OpenAPI模式,以及安装PyYAML和uritemplate来生成静态或动态模式。此外,还介绍了使用drf-yasg库来创建更友好的API文档,并提供了配置示例。

假如现在已经有了一部分API,我们需要一种方法来快速记录其功能,并且准确地给别人。

毕竟,在大多数公司和团队中,使用API的开发人员与最初构建它的开发人员一般不同。

这对我们来说幸运的是,有自动工具可以处理。
比如schema是机器可读的文档,概述了所有可用的API端点,URL和支持的HTTP动词(GET,POST,PUT,DELETE等)。

将文档简化为人类易于阅读和使用的结构。我们将添加一个模式添加到项目中,然后添加两种不同的文档编制方法。到最后我们将实现一种自动化的方式来记录我们的 API 当前和将来的 任何变化。

比如现在我们有如下的接口,已有的大致api列表

  |Endpoint |HTTP Verb|
|--------------------------------------|---------|
|/                                     |GET |
|/:pk/                                 |GET |
|users/                             |GET |
|users/:pk/                         |GET |
|/rest-auth/registration             |POST |
|/rest-auth/login                     |POST |
|/rest-auth/logout                     |GET |
|/rest-auth/password/rest_framework                  |POST |
|/rest-auth/password/reset/confirm                 |POST |

2 模式 Schemas

   django rest framework 已经切换到OpenAPI模式

第一步是同时安装PyYAML和uritemplate PyYAML 这将改变我们的架构,转换为OpenAPI格式是基于YAML的,而uritemplate将参数添加到URL路径。

接下来,我们可以选择:生成静态模式或动态模式。如果您的API不会经常更改,因此可以定期生成静态模式并从静态服务器提供服务档案以取得强大效能.

但是,如果您的API确实经常更改,则可以考虑动态选项。我们将在此处实现两者。 安装依赖包

            pip install pyyaml==5.3.1 uritemplate==3.0.1

首先,是使用generatechema管理命令的静态模式方法。我们可以将结果输出到文件: openapi-schema.yml.

静态方法:

 python manage.py generateschema > openapi-schema.yml

如果您打开该文件,则该文件会很长,而且不友好。但是对于电脑来说,这是完美的格式化。

对于动态方法,

通过在顶部导入get_schema_view来更新config/urls.py

然后在openapi创建专用路径。标题,描述和版本可以是根据需要定制。修改全局配置 config/url.py

  • 模板静态处理api

      from rest_framework.schemas import get_schema_view 
          ...
          path('openapi', get_schema_view( # new
              title="Blog API",
              description="A sample API for learning DRF",
              version="1.0.0"), name='openapi-schema'),
          ]
    

现在访问 http://127.0.0.1:2000/openapi, 以查看变化,可以看到不太友好。

  • 动态方法 翻译api 为文档给其他开发者

    Django REST框架还带有内置的API文档功能,可翻译,对其他开发人员而言,将架构转换为更友好的格式。

    或者使用第三方包 drf-yasg, 它有更多功能。 这里将使用第三方包 drf-yasg

3 使用依赖库

  • 1,安装:pip install install drf-yasg==1.17.1

  • 2,注册,使用第三方包都需要注册,不要忘记注册第三方包,否则运行时可能找不到该功能:

     # config/settings.py
      INSTALLED_APPS = ['drf_yasg', # new]
    
  • 3, 更新urls.py 路由

第三步,更新我们的项目级别的urls.py文件。 我们可以替换DRF,从drf_yasg中获取get_schema_view以及导入openapi。我们还将添加DRF并允许使用其他选项。

schema_view变量已更新,并包含其他字段,例如terms_of_service联系人和许可。
然后在我们的urlpatterns下,为Swagger和ReDoc添加路径,config/urls.py

其他导入和配置不变不变

    from rest_framework import permissions # new
    from drf_yasg.views import get_schema_view # new
    from drf_yasg import openapi # new

    schema_view = get_schema_view( # new
        openapi.Info(
        title="Blog API",
        default_version="v1",
        description="A sample API for learning DRF",
        terms_of_service="https://www.google.com/policies/terms/",
        contact=openapi.Contact(email="hello@example.com"),
        license=openapi.License(name="BSD License"),
        ),
        public=True,
        permission_classes=(permissions.AllowAny,),
        )
    ... 

访问http://127.0.0.1:2000/swagger/http://127.0.0.1:2000/redoc/

他们非常全面,并阐明了更多可以取决于API的需求.

文档是任何API的重要组成部分。通常,这是开发人员的第一件事在团队内部还是在开源项目中查看。

得益于自动化工具,我们通过第三方库的使用 仅需要少量的配置 旧可以确保您的API拥有准确的最新文档Django REST框架。

在三个不同项目的过程中-库API,Todo API和博客API-我们从头开始逐步构建更复杂的Web API。

在此过程的每一步中,Django REST框架都提供了内置功能,使我们更轻松。

官方文档是进一步探索的绝佳资源。现在您已经掌握了基本知识.

4 小结

传统的Django测试可以而且应该可应用于任何Web API项目,但Django REST中还有一整套工具仅用于测试API请求的框架。

可以参考实现官方DRF教程中介绍的pastebin API。

第三方包对于Django REST Framework开发至关重要,而对于Django本身。完整清单可以在Django Packages上找到,也可以使用在Github上的awesome-django.

参考:

 https://www.django-rest-framework.org/

 https://djangopackages.org/
目录
相关文章
|
6月前
|
数据库 Python
【译】Celery文档3:在Django中使用Celery
【译】Celery文档3:在Django中使用Celery
|
存储 前端开发 关系型数据库
Django 项目 MVT 结构
Django 项目 MVT 结构
105 1
|
数据采集 机器学习/深度学习 算法
基于python机器学习 Django的二手房交易预测及展示系统 完整代码+报告文档
基于python机器学习 Django的二手房交易预测及展示系统 完整代码+报告文档
667 0
基于python机器学习 Django的二手房交易预测及展示系统 完整代码+报告文档
|
关系型数据库 MySQL 测试技术
django基于python智能在线考试阅卷系统(源码+系统+mysql数据库+Lw文档)
随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的基于python的学校对在线考试阅卷系统的平台,这样可以有效地解决基于python的在线考试阅卷系统混乱的局面。本文首先介绍了基于python的在线考试系统的发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E-R图。然后,设计框架并根据设计的框架编写代码以实现系统的各个功能模块。最后,对初步完成的系统进行测试,主要是
665 0
|
JSON JavaScript 前端开发
使用Python3.7+Django2.0.4配合vue.js2.0的组件递归来实现无限级分类(递归层级结构)
所谓的无限极分类是啥?其实简单点说就是一个人类可以繁衍出多个后代,然后一个后代又可以分另外多个后代这样无限繁衍下去(可以想象[神奇动物在哪里2](https://movie.douban.com/subject/26147417/)里面莱斯特兰奇的家族族谱),就好象linux系统你可以新建一个文件夹,然后在这个文件夹里又可以建一些个文件夹,在文件夹底下还可以建一些文件夹一样,随后使用tree命令就可以查看文件夹目录层级。
使用Python3.7+Django2.0.4配合vue.js2.0的组件递归来实现无限级分类(递归层级结构)
|
Web App开发 安全 测试技术
Django 2.1.3文档
关于Django你需要知道的一切。 获得帮助 遇到麻烦?我们想帮忙! 尝试常见问题解答 - 它可以解答许多常见问题。 寻找具体信息?尝试索引,模块索引或详细目录。 在django-users邮件列表的档案中搜索信息,或 发布问题。
2296 0
|
安全 程序员 测试技术
Django 1.8.2 文档
django 百科全书 入门¶刚开始学习Django或者编程?让我们从这里开始吧! 从零开始: 概述 | 安装 教程: 第1部分:模型(100%) | 第2部分:管理站点(100%) | 第3部分:视图和模板 | 第4部分:表单和通用视图(100%) | 第5部分:测试(100%) | 第6部分:静态文件(100%) 高级教程: 如何编写可重用的应用(100%) | 编写Django的第一个补丁(100%) 模型层¶ Django提供了一个抽象层(“模型”),用于构造和操纵Web应用程序的数据。
5737 0
|
Python
安装Django完整文档
Django官方网站包含了怎么部署Django的所有环节,网址如下: https://docs.djangoproject.com/en/1.11/topics/install/
1097 0
|
Python
django 1.8 官方文档翻译:7-3 Django管理文档生成器
Django管理文档生成器 Django的admindocs应用从模型、视图、模板标签以及模板过滤器中,为任何INSTALLED_APPS中的应用获取文档。
898 0