欢迎访问宙启技术站
智能推送

使用DRF_Yasg.openapiInfo()构建OpenAPI文档

发布时间:2023-12-14 08:17:10

DRF_Yasg是一个用于Django Rest Framework的扩展库,用于自动生成OpenAPI(以前称为Swagger)文档。它提供了一个方便的方式来定义API的结构、参数和响应,并将其转化为可视化的文档。DRF_Yasg.openapiInfo()是其主要功能之一,它用于构建OpenAPI文档。

使用DRF_Yasg.openapiInfo()可以将API视图函数、序列化器和视图集等内容转化为OpenAPI文档。以下是一个带有使用例子的详细解释。

首先,在Django项目的settings.py文件中安装DRF_Yasg库,并将其添加到INSTALLED_APPS列表中。

INSTALLED_APPS = [
    ...
    'drf_yasg',
    ...
]

然后,在项目的urls.py文件中添加DRF_Yasg所需的URL配置。

from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from rest_framework.documentation import include_docs_urls

import drf_yasg.views
import drf_yasg.urls

router = routers.DefaultRouter()

# 添加你的API视图集
router.register(r'users', views.UserViewSet)

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls')),
    path('admin/', admin.site.urls),

    # 添加DRF_Yasg的URL配置
    path('swagger<str:url>', include(drf_yasg.urls)),
    path('docs/', include_docs_urls(title='My API')),
]

现在,你可以在浏览器中访问/docs/,将看到自动生成的API文档。注意,此时它只包含了基本的信息,如API根路径和认证方式。

为了更详细地定义API,我们需要在视图函数或视图集的注释中添加OpenAPI的标签和注解。

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """

    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer

    @swagger_auto_schema(responses={200: UserSerializer(many=True)})
    def list(self, request, *args, **kwargs):
        """
        Return a list of all the users.
        """
        return super().list(request, *args, **kwargs)

上面的例子中,我们在视图集的注释中添加了API的描述文字。在list方法上,我们使用了swagger_auto_schema装饰器,用于指定响应的数据类型和格式。

使用DRF_Yasg.openapiInfo()来创建OpenAPI文档非常简单。在项目的serializers.py文件中,我们可以将API的序列化器转化为OpenAPI的数据模型。

from drf_yasg import openapi

class UserSerializer(serializers.ModelSerializer):
    """
    Serializer for User model.
    """

    class Meta:
        model = User
        fields = '__all__'

    openapi_schema = {
        'type': 'object',
        'properties': {
            'id': {
                'type': 'integer',
                'format': 'int32',
            },
            'username': {
                'type': 'string',
            },
            'email': {
                'type': 'string',
                'format': 'email',
            },
        },
    }

完成上述步骤后,当我们再次访问/docs/时,将能看到更详细的API文档,包括请求和响应的数据结构、参数和示例。

总之,DRF_Yasg.openapiInfo()是一个方便的工具,可以帮助我们自动生成基于Django Rest Framework的OpenAPI文档。我们可以使用适当的注释和装饰器来定义API的结构和参数。通过这种方式,我们可以为我们的API提供专业且易于理解的文档,从而提高开发人员的工作效率。