1.模块安装
pip install drf-yasg
2.模块配置
SWAGGER_SETTINGS = {
'PERSIST_AUTH': True,
'REFETCH_SCHEMA_WITH_AUTH': True,
'REFETCH_SCHEMA_ON_LOGOUT': True,
'SECURITY_DEFINITIONS': {
'JWT': {
'type': 'apiKey',
'name': 'Authorization',
'in': 'header'
},
}
}
from django.conf.urls import url
from rest_framework import permissions
from drf_yasg import openapi
from drf_yasg.views import get_schema_view
from utils.login import LoginObtainJSONWebToken
SchemaView = get_schema_view(
openapi.Info(
title="XXXXX服务平台",
default_version='v1.0',
description="""
XXXXX平台 API 遵循 REST 标准进行设计。
我们的 API 是 可预期的 以及 面向资源 的,接受 `form-encoded` 请求正文,返回 `JSON-encoded` 响应, 使用标准的 HTTP 响应代码 ,认证(JWT)和参数。
所有请求和响应的编码均为 UTF-8。
""",
contact=openapi.Contact(email="1182900548@qq.com"),
license=openapi.License(name="BSD License"),
),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
url(r'^swagger(?P<format>.json|.yaml)$', SchemaView.without_ui(cache_timeout=0), name='schema-json'),
url(r'^redoc/$', SchemaView.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
url(r'^swagger/$', SchemaView.with_ui('swagger', cache_timeout=None), name='cschema-swagger-ui'),
]
3.文档生成
(1) 接口描述,接口分组,搜索参数,接口标题设置
class UserAdminViewSet(ModelViewset):
queryset = models.UsersModel.objects.all()
def get_serializer_class(self):
return serializers.UserAdminSerializersForChange
@swagger_auto_schema(
operation_description=""" 用户列表""",
manual_parameters=[
openapi.Parameter(
"name",
openapi.IN_QUERY,
description="用户名称模糊搜索",
type=openapi.TYPE_STRING
),
],
operation_summary='用户列表',
tags=['用户管理']
)
def list(self, request, *args, **kwargs):
return super(UserAdminViewSet, self).list(request, *args, **kwargs)
(2)POST请求数据提交自定义提交表单
class ConfigModelSerializers(serializers.ModelSerializer):
item = serializers.IntegerField(help_text='配置项的Key', required=True)
class Meta:
model = models.ConfigModel
fields = ('item', 'context')
class ConfigView(APIView):
"""配置表更新和查询接口"""
@swagger_auto_schema(
operation_description="修改配置信息",
responses={404: 'Not found', 200: ConfigModelSerializers},
request_body=serializers.ConfigModelSerializers,
tags=['配置信息'],
operation_summary='配置信息修改',
)
def put(self, request):
return Response(status.HTTP_200_OK)
@method_decorator(name='retrieve', decorator=swagger_auto_schema(
operation_description="基本信息", operation_summary='基本信息', tags=['单条差看']
))
@method_decorator(name='update', decorator=swagger_auto_schema(
operation_description="数据更新", operation_summary='数据更新', tags=['更新']
))
class UsersViewSet(ModelViewSet):
queryset = models.UsersModel.objects.all()
def get_serializer_class(self):
return serializers.UserSerializersForChange
@decorators.action(methods=['put'], detail=True)
@swagger_auto_schema(
operation_description="修改密码",
operation_summary='修改密码',
responses={400: '原密码错误', 200: openapi.Response(description='ok', examples={
'application/json': {'messgage': '密码修改成功!'}
})},
request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
required=['password', 'new_password'],
properties={
'password': openapi.Schema(type=openapi.TYPE_STRING,required=True, description='原密码'),
'new_password': openapi.Schema(type=openapi.TYPE_STRING, description='新密码')
}
),
tags=['密码修改']
)
def change_pwd(self, *args, **kwargs):
"""修改密码"""
return self.error('密码必须在8-12位之间!')