Django-Rest-Framework:记录没有模型的基于函数的视图的参数
Django-Rest-Framework: documenting parameters of function-based view without model
所以,我有一个 DRF 应用程序的基于函数的视图,看起来像这样:
from rest_framework.decorators import api_view, permission_classes
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from rest_framework import status
def passcode_generator(callsign: str) -> int:
return 0 # Placeholder
@api_view(["POST"])
@permission_classes([AllowAny])
def get_passcode(request):
callsign = request.data.get("callsign", None)
if callsign is None:
raise Response(
{"error": "Missing callsign"}, status=status.HTTP_400_BAD_REQUEST
)
return Response({"passcode": passcode_generator(callsign)})
显然,"callsign"
是唯一预期的参数,而且是强制性的。 "passcode"
是响应中的唯一字段。但是DRF不知道。
这意味着 DRF 的网络可浏览 API 页面无法显示 HTML 表单选项卡,并且意味着文档生成器无法正确记录它:
那么问题来了,一个文档如何记录这个基于函数的视图?
谢谢!
我不确定这可以用普通 DRF 完成。据我所知,目前支持的 Django 最好的模式生成器是 drf-spectacular
。所以如果你使用 drf-spectacular
,你必须这样记录:
@extend_schema(
parameters=[
OpenApiParameter(name='callsign', description='<description>',
required=True, type=str),
],
description='More descriptive text'
)
def get_passcode(request):
callsign = request.data.get("callsign", None)
# ...
根据 tests:
可以用这种方式记录响应
@extend_schema_view(
create=extend_schema(description='creation description', responses={
201: OpenApiResponse(response=int, description='creation with int response.'),
222: OpenApiResponse(description='creation with no response.'),
223: None,
224: int,
}),
list=extend_schema(responses=OpenApiResponse(
response=OpenApiTypes.INT,
description='a list that actually returns numbers',
examples=[OpenApiExample('One', 1), OpenApiExample('Two', 2)],
)),
)
所以,我有一个 DRF 应用程序的基于函数的视图,看起来像这样:
from rest_framework.decorators import api_view, permission_classes
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from rest_framework import status
def passcode_generator(callsign: str) -> int:
return 0 # Placeholder
@api_view(["POST"])
@permission_classes([AllowAny])
def get_passcode(request):
callsign = request.data.get("callsign", None)
if callsign is None:
raise Response(
{"error": "Missing callsign"}, status=status.HTTP_400_BAD_REQUEST
)
return Response({"passcode": passcode_generator(callsign)})
显然,"callsign"
是唯一预期的参数,而且是强制性的。 "passcode"
是响应中的唯一字段。但是DRF不知道。
这意味着 DRF 的网络可浏览 API 页面无法显示 HTML 表单选项卡,并且意味着文档生成器无法正确记录它:
那么问题来了,一个文档如何记录这个基于函数的视图?
谢谢!
我不确定这可以用普通 DRF 完成。据我所知,目前支持的 Django 最好的模式生成器是 drf-spectacular
。所以如果你使用 drf-spectacular
,你必须这样记录:
@extend_schema(
parameters=[
OpenApiParameter(name='callsign', description='<description>',
required=True, type=str),
],
description='More descriptive text'
)
def get_passcode(request):
callsign = request.data.get("callsign", None)
# ...
根据 tests:
可以用这种方式记录响应 @extend_schema_view(
create=extend_schema(description='creation description', responses={
201: OpenApiResponse(response=int, description='creation with int response.'),
222: OpenApiResponse(description='creation with no response.'),
223: None,
224: int,
}),
list=extend_schema(responses=OpenApiResponse(
response=OpenApiTypes.INT,
description='a list that actually returns numbers',
examples=[OpenApiExample('One', 1), OpenApiExample('Two', 2)],
)),
)