Opt*_*ime 4 swagger django-rest-framework drf-yasg
我正在使用 drf_yasg 来自我记录我的 API,该 API 是使用 django 框架构建的,但任何端点都没有显示任何参数。我的方法是以 JSON 格式在 http 请求正文中传递参数。然后我从 request.data 读取参数。下面是其中一个视图的示例,其中它将“id”作为请求正文中的参数。
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def get_availability_by_schoolid(request):
if request.user.is_donor:
try:
#Get the existing slots and remove them to replace with new slots
slots = SchoolSlot.objects.filter(school__id=request.data["id"]).values('day','am','pm')
availability = process_availability(slots)
availabilityslotserializer = SchoolSlotSerializer(availability)
return Response(availabilityslotserializer.data, status=status.HTTP_200_OK)
except Exception as e:
print(e)
return Response(ResponseSerializer(GeneralResponse(False,"Unable to locate school")).data, status=status.HTTP_400_BAD_REQUEST)
else:
return Response(ResponseSerializer(GeneralResponse(False,"Not registered as a donor")).data, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
这将在 swagger 文档中显示如下:
我一直在查看文档,它表明我可能需要添加带有手动参数的装饰器,但我不知道如何做到这一点,因为我能找到的示例是获取查询参数或路径参数。我在下面添加了装饰器,它可以响应文档。
@swagger_auto_schema(method='post', responses={200: SchoolSlotSerializer,400: 'Bad Request'})
Run Code Online (Sandbox Code Playgroud)
请求正文的示例如下:
{ "id": 43 }
Run Code Online (Sandbox Code Playgroud)
更新:
我似乎通过以下装饰器得到了一些东西:
@swagger_auto_schema(method='post', request_body=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'id': openapi.Schema(type=openapi.TYPE_INTEGER, description='Donor ID')
}),
responses={200: SchoolSlotSerializer,400: 'Bad Request'})
Run Code Online (Sandbox Code Playgroud)
这记录了参数。现在,我的另一个端点需要以下 JSON 作为输入,我将如何添加它?
{
"availability": {
"mon": {
"AM": true,
"PM": false
},
"tue": {
"AM": false,
"PM": false
},
"wed": {
"AM": false,
"PM": false
},
"thu": {
"AM": true,
"PM": true
},
"fri": {
"AM": false,
"PM": false
},
"sat": {
"AM": false,
"PM": false
},
"sun": {
"AM": true,
"PM": false
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用基于类的视图,请执行以下操作:
from drf_yasg.utils import swagger_auto_schema
class EmployeeApiView(APIView):
@swagger_auto_schema(request_body=EmployeeSerializer)
def post(self, request, format=None):
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7745 次 |
| 最近记录: |