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

使用drf_yasg.openapi为DjangoRestFramework项目自动生成中文API文档

发布时间:2023-12-27 02:42:10

在Django Rest Framework项目中,可以使用drf_yasg.openapi来自动生成中文API文档,并带有使用例子。drf_yasg是一个用于自动生成Swagger/OpenAPI规范的库。下面将介绍如何在Django Rest Framework项目中使用drf_yasg.openapi来生成中文API文档,并给出相应的例子。

首先,需要安装drf_yasg和django-filter库,可以使用pip命令进行安装。

pip install drf_yasg django-filter

接下来,在项目的settings.py文件中添加相关配置。

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

SWAGGER_SETTINGS = {
    'USE_SESSION_AUTH': False,
    'SECURITY_DEFINITIONS': {
        'apiKey': {
            'type': 'apiKey',
            'in': 'header',
            'name': 'Authorization'
        }
    },
}

然后,在项目的urls.py文件中引入drf_yasg的相关模块,注册接口。

from django.conf.urls import url
from django.urls import include
from rest_framework import routers
from drf_yasg import openapi
from drf_yasg.views import get_schema_view

router = routers.DefaultRouter()

# 注册接口
urlpatterns = [
    ...
    url(r'^api/', include(router.urls)),
    url(r'^api/docs/$', get_schema_view(
        openapi.Info(
            title="API文档",
            default_version='v1',
            description="这是一个API文档",
        ),
        public=True,
        permission_classes=(permissions.AllowAny,),
    ), name='swagger-ui'),
    ...
]

接着,在项目中的views.py文件中编写API接口的代码。以一个简单的User模型为例,创建一个UserViewSet类,并编写相应的API接口。

from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response

from .models import User
from .serializers import UserSerializer


class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

    @action(detail=True, methods=['post'])
    def reset_password(self, request, pk=None):
        user = self.get_object()
        # 这里写重置密码的逻辑
        return Response({'msg': '密码重置成功'})

然后,在项目中的serializers.py文件中编写User模型的序列化器。

from rest_framework import serializers
from .models import User


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

最后,在项目的examples.py文件中编写一些使用例子。

from drf_yasg import openapi

example_user = {
    'id': 1,
    'username': 'example',
    'password': '********',
    'email': 'example@example.com',
    'phone': '1234567890',
}

example_reset_password = {
    'msg': '密码重置成功',
}

example_user_response = openapi.Response(
    description='用户信息',
    schema=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'id': openapi.Schema(type=openapi.TYPE_INTEGER),
            'username': openapi.Schema(type=openapi.TYPE_STRING),
            'password': openapi.Schema(type=openapi.TYPE_STRING),
            'email': openapi.Schema(type=openapi.TYPE_STRING, format=openapi.FORMAT_EMAIL),
            'phone': openapi.Schema(type=openapi.TYPE_STRING),
        }
    )
)

example_reset_password_response = openapi.Response(
    description='重置密码响应',
    schema=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'msg': openapi.Schema(type=openapi.TYPE_STRING),
        }
    )
)

现在就可以运行项目,并访问API文档了。打开浏览器,输入API文档的URL,例如 http://localhost:8000/api/docs/ ,就可以看到自动生成的API文档页面。

在API文档页面上可以看到接口的详细信息,包括请求方法、请求路径、请求参数、请求示例、响应参数、响应示例等等。同时,也会显示使用例子中定义的参数和响应示例。

通过使用drf_yasg.openapi,我们可以方便地在Django Rest Framework项目中自动生成中文API文档,并且提供了例子来帮助理解和使用API接口。这样不仅能够提高开发效率,还可以方便与前端工程师、测试工程师等对接接口。