参考
django-rest-framework
https://www.django-rest-framework.org/api-guide/schemas/drf-yasg
https://drf-yasg.readthedocs.io/en/stable/readme.html
APIView
APIView也可以注册到swagger 但是不会显示参数 需要手动设定
class cmdView(APIView):
schema = AutoSchema(
manual_fields=[
coreapi.Field(
name='code',
required=True,
location='form',
description='',
type='string'),
]
)
@swagger_auto_schema(request_body=cmdSerializer,operation_description="description")
def post(self, request, format=None):
serializer = cmdSerializer(data=request.data)
if serializer.is_valid():
# json_data = json.loads(request.data)
message = messageMakeSync()
sendMessage = message.make(request.data)
if sendMessage is not None:
channel_layer = get_channel_layer()
async_to_sync(
channel_layer.group_send)(
"chat_test", sendMessage)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
error = serializer.errors
print(error)
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
具体注解看:
Custom schema generation — drf-yasg 1.20.0 documentation
https://drf-yasg.readthedocs.io/en/stable/custom_spec.html
使用版本管理
若使用了版本管理,需要将URL指定namespace,否则不显示在swagger中
setting中的设置:
REST_FRAMEWORK = {
# 版本控制
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning',
'DEFAULT_VERSION': 'v1'
}
开启版本管理
只显示namespace为v1的,不用版本管理则会显示全部
可以通过path('system/', include(("system.urls", "system"), namespace="v1")),
来引入APIView
system/urls.py:
from django.conf.urls import url
from django.urls import path
from . import views
urlpatterns = [
path('cmd/', views.cmdView.as_view()),
]