• DRF__自动生成接口文档


    drf生成接口文档

    方式1:coreapi

    安装依赖:

    1. coreapi
    2. Pygments (可选)
    3. Markdown (可选)

    配置

    settings的相关配置

    如果drf的版本在3.10以上,需要在settings中的REST_FRAMEWORK中配置如下:

    REST_FRAMEWORK = {
        "DEFAULT_SCHEMA_CLASS": "rest_framework.schemas.coreapi.AutoSchema",
    }
    

    根路由的配置

    在根路由中添加如下代码:

    from rest_framework.documentation import include_docs_urls
    
    urlpatterns=[
        # api-docs url
        path('api-docs/', include_docs_url(title='接口文档',description='这是一个接口文档的demo'))
    ]
    

    这里的include_docs_url参数还可以配置 认证、授权等等

    添加注解内容

    一个好的接口文档需要对接口的各个字段进行解释,并且对每个接口是干嘛的进行相关解释

    访问上述配置好的链接:127.0.0.1:8000/api-docs/ 看到接口文档页面如下:

    image

    第一个接口有接口的描述内容,但是有的字段有字段的描述内容,有的没有, 第二个接口没有接口描述内容,但是主键id的描述给了一个默认的

    添加接口描述

    通用视图类中

    class DemoView(generics.APIView):
        """
        get:
        这里填写get请求的描述内容
        
        post:
        这里填写post请求的内容
        """
        def get():
            ...
        def post():
            ...
    

    视图集中

    class DemoViewSet(ModelViewSet):
        """
        create:
        这里添加action为 create的描述内容
        
        list:
        这里添加action为 list的描述内容
        """
    

    综上,在添加接口的描述内容时,视图类是对应不同的请求get post put patch等等,视图集中是对应不同的action,注意两者的声明方式的区别

    添加接口字段描述

    接口字段的描述相当重要,这里是从对应模型类的help_text属性中带出来的,比如:

    class Article(models.Model):
        title = models.CharField(max_length=50, help_text="标题")
        body = models.TextField(help_text="文章的内容")
        created = models.DateField(default=timezone.now)
        updated = models.DateField(auto_now=True)
        author = models.ForeignKey(User, on_delete=models.CASCADE, related_name="xxx", help_text="外键关联django自带的User表")
        category = models.ForeignKey(to='Category', on_delete=models.SET_NULL, null=True, blank=True,
                                     related_name='articles')
        tags = models.ManyToManyField(to='Tag', through='Artile_Tag', through_fields=('article', 'tag'),
                                      related_name='articles')
    
        def __str__(self):
            return self.title
    
        class Meta:
            ordering = ['-updated']
    

    如上这么多字段,在接口文档中会发现,其中有些字段并没有展示出来,因为在序列化类中,我们定义了一些字段为read_only,这里的接口文档只会带出序列化时 定义的可以传递的参数,并且注明 是不是必填字段


    方式2:swagger

    安装依赖:

    1. drf-yasg

    配置

    在根路由中添加配置如下:

    from drf_yasg.views import get_schema_view
    from drf_yasg import openapi
    
    # swagger配置
    schema_view = get_schema_view(
        openapi.Info(
            title="swagger接口文档",  # required
            default_version="v1",  # required
            description="title下面的描述",
            # terms_of_service="",
            contact=openapi.Contact(email="alan.qin@lixinchuxing.com"),
            license=openapi.License(name="test str"),
        ),
        public=True,
        # permission_classes=(),  # 权限类
    )
    
    swagger_url_patterns = [
        re_path(r'^swagger(?P<format>.json|.yaml)$', schema_view.without_ui(cache_timeout=0), name='schema-json'),
        path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='swagger-ui'),
        path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='swagger-redoc'),
    ]
    
    urlpatterns += swagger_url_patterns
    

    接口和字段描述

    接口的描述

    在对应的视图类中添加注释如下:

    class ArticleViewSet(viewsets.ModelViewSet):
        '''
        create:
        创建一个新的数据
    
        list:
        展示所有的article列表
        '''
    

    在swagger中可以看到描述内容:

    image

    字段的描述

    image

  • 相关阅读:
    【html+table】基于jQuery,利用TableFreeze.js实现html的table冰冻效果,非常强大
    vue中使用element-ui实现excel表格导入
    正则第二次配结果与第一次不一致;正则匹配,第一次匹配结果正常,第二次匹配结果就错误,第三次又正常,第四次又错误,以此类推
    关于用vsCode格式化代码时,代码自动换行问题
    百度地图实现测量面积和测量距离功能
    sql 通过group by、sum聚合查询结果的排序
    C#小数计算的坑
    C# 反射的例子
    IE8环境下的上传图片预览
    做移动端电子签名发现canvas的 一些坑
  • 原文地址:https://www.cnblogs.com/alantammm/p/15214853.html
Copyright © 2020-2023  润新知