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

了解如何使用drf_yasg.openapi生成中文接口文档

发布时间:2023-12-27 02:38:16

drf_yasg是一个用于生成OpenAPI规范(之前被称为Swagger)文档的库。它为Django REST Framework(简称DRF)提供了一种简单的方法来为您的API生成文档。在这篇文章中,我将向您介绍如何使用drf_yasg生成中文接口文档,并提供一些使用示例。

首先,您需要在您的项目中安装drf_yasg。您可以使用以下命令来安装它:

pip install drf-yasg

安装完成后,您需要在项目的settings.py文件中进行配置。下面是一个简单的配置示例:

INSTALLED_APPS = [
    ...
    'drf_yasg',
]

接下来,您需要在您的urls.py文件中添加drf_yasg的URL配置。下面是一个示例:

from rest_framework import routers
from drf_yasg import openapi
from drf_yasg.views import get_schema_view

# 创建一个路由器并注册您的视图
router = routers.DefaultRouter()

# 设置drf_yasg的视图
schema_view = get_schema_view(
    openapi.Info(
        title="API文档",
        default_version='v1',
        description="这个文档描述了API的使用方法",
        terms_of_service="https://www.example.com/policies/terms/",
        contact=openapi.Contact(email="contact@example.com"),
        license=openapi.License(name="BSD License"),
    ),
    public=True,
    permission_classes=[permissions.AllowAny],
    patterns=router.urls,
)

urlpatterns = [
    ...
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
    ...
]

在这个示例中,我们创建了一个路由,并将其与我们的视图集合进行了注册。然后,我们创建了一个schema_view,并为其指定了一些元数据,如标题、版本号、描述等。在配置术语和联系人的信息时,您可以根据您的项目需求进行修改。随后,我们将schema_view与'swagger'和'redoc'接口文档浏览器的URL配置一起添加到urlpatterns中。

接下来,您可以运行您的项目,并访问'/swagger/'或'/redoc/' URL,以在浏览器中查看生成的接口文档。

现在,让我们来看一些使用drf_yasg的示例。

假设我们有一个简单的REST API,用于管理书籍的信息。我们的模型类可能如下所示:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    publication_date = models.DateField()

我们可以使用DRF的序列化器来定义我们的API视图。以下是一个简单的序列化器示例:

from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = "__all__"

接下来,我们将创建一个视图集合来处理我们的API请求。以下是一个例子:

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

现在,我们将使用drf_yasg来为我们的API生成文档。我们将在上面的示例基础上继续编写。

首先,我们需要导入必要的模块:

from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
from drf_yasg.views import get_schema_view

from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

现在,我们将使用swagger_auto_schema装饰器来为我们的API视图添加文档。以下是一个示例:

@swagger_auto_schema(
    tags=['书籍'],
    manual_parameters=[
        openapi.Parameter(
            name='id',
            in_=openapi.IN_QUERY,
            type=openapi.TYPE_INTEGER,
            description='书籍的ID',
            required=True,
        ),
    ],
    responses={
        200: openapi.Response(
            description='成功',
            schema=BookSerializer(many=True),
        ),
        404: openapi.Response(
            description='未找到书籍',
        ),
        401: openapi.Response(
            description='未验证',
        ),
    },
)
@action(detail=False, methods=['get'])
def books(request):
    """
    获取所有书籍的列表
    """
    books = Book.objects.all()
    serializer = BookSerializer(books, many=True)
    return Response(serializer.data)

在这个示例中,我们使用swagger_auto_schema装饰器为我们的books视图添加了文档。我们为这个视图添加了一个标签,以便将其归类到"书籍"类别中。我们还添加了一个手动参数,它指定了我们期望的查询参数。我们还添加了一系列的响应,其中包含了成功、未找到书籍和未验证的情况。

除此之外,您还可以使用其他的装饰器和参数来自定义您的接口文档,以适应您的项目需求。

综上所述,drf_yasg是一个强大的库,可以帮助您轻松地为您的Django REST Framework API生成中文接口文档。您可以使用上面的示例作为起点,并根据您的具体情况进行修改和扩展,以满足您的项目需求。同时,drf_yasg还提供了丰富的文档自定义选项,可以帮助您创建出规范、详细的接口文档。