自定义路径参数解析drf-yasg和Django。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义路径参数解析drf-yasg和Django。相关的知识,希望对你有一定的参考价值。
我是想强迫 dry-yasg
来正确解析路径中的参数。假设我们有
path('users/<int:user_id>/', whatever.as_view(...))
在swagger docs中,它不被当作 int
但 string
而是
我已经使用了
swagger_auto_schema(manual_parameters = [
openapi.Parameter(
name,
openapi.IN_PATH,
description=desc,
type=openapi.TYPE_INTEGER,
required=True
)
]
但这很烦人。我找不到一个负责解析的functionmethodclass。 有没有一种简单的方法来改变这个解析器基于路径的行为,这样如果 int
则 openapi.TYPE_INTEGER
将被返回,而不是 string
?
答案
drf-yasg 自动确定参数类型 在某些情况下如果检测失败,就会回到字符串。
queryset = get_queryset_from_view(view_cls)
for variable in sorted(uritemplate.variables(path)):
model, model_field = get_queryset_field(queryset, variable)
attrs = get_basic_type_info(model_field) or {'type': openapi.TYPE_STRING}
正如你所看到的,它试图根据视图查询集的列类型来获取类型。如果你的参数名与查询集中的任何内容都不匹配,你就会得到一个字符串。所以你的第一选择应该是尝试使用一个它可以自动检测的名字。
然而,如果这行不通,你将需要子类化为 EndpointEnumerator
并覆盖 get_path_parameters()
,可能最简单的叫法是 super().get_path_parameters()
并检查每个参数,并根据变量名称替换类型。
要使用这个类,你需要 你自己 OpenAPISchemaGenerator
.
- 使用一个自定义的OpenAPISchemaGenerator。
- 用你自己的 EndpointEnumerator 覆盖它的 endpoint_enumerator_class。
以上是关于自定义路径参数解析drf-yasg和Django。的主要内容,如果未能解决你的问题,请参考以下文章
drf-yasg:图像字段未在 swagger ui 中显示
xadmin引入drf-yasg生成Swagger API文档