我有一个使用 Django 创建的 RESTful API 的 GET 端点。此端点从 URL 的查询字符串中读取三个值。查询字符串中的特定参数可能会更改来自此端点的 JSON 响应中返回的数据(包括额外的字段并稍微更改结构)。
此端点不直接绑定到单个模型。我的视图子类RetrieveAPIView
,在视图中,我重写了get_object
方法并执行了一些逻辑来查询多个模型,做出一些决定并返回一个有序的字典。
我的问题如下:
我想使用 Swagger 记录这个端点。我drf-yasg
用来生成我的 Swagger 文档。我没有为此视图声明序列化程序;因为我手动构建了一个有序字典,get_object
所以我没有看到声明一个字典的目的。我不确定如何使用drf-yasg
.
我只发现了一种记录端点的方法,但它非常丑陋并且使我的代码膨胀,我想知道是否有更好的方法。
通过声明一个openapi.Response
对象,并将这个对象提供给@swagger_auto_schema
装饰器 Swagger 显示两个可能的响应,但描述整个响应确实使我的代码膨胀。这是一个示例,如果当前可以记录端点:
class View(RetrieveAPIView):
http_method_names = ['get']
response_json = {
'Response if X query parameter is something': {
'key1': 'string',
'key3': {
'key4': 0,
'key5': 'string',
'key6': 'string'
}
},
'Response if X query parameter is something else': {
'key1': 'string',
'key2': 'string'
}
}
swagger_get_responses = openapi.Response(description='Description for the set of responses',
examples=response_json)
@swagger_auto_schema(responses={200: swagger_get_responses})
def get(self, request, *args, **kwargs):
return super().get(request, args, kwargs)
def get_object(self):
// Execute a method on a model that queries other models, performs some logic, and
// then returns an ordered dict which is then returned by this function.
有没有更好的方法来解决这个问题?是否有更好的 Django 框架或 drf-yasg 库的 Django 设计模式/功能,我可以在这里应用它来帮助我处理多个响应体?