自定义路径参数解析drf-yasg和Django。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义路径参数解析drf-yasg和Django。相关的知识,希望对你有一定的参考价值。

我是想强迫 dry-yasg 来正确解析路径中的参数。假设我们有

path('users/<int:user_id>/', whatever.as_view(...))

在swagger docs中,它不被当作 intstring 而是

enter image description here

我已经使用了

swagger_auto_schema(manual_parameters = [
openapi.Parameter(
        name,
        openapi.IN_PATH,
        description=desc,
        type=openapi.TYPE_INTEGER,
        required=True
    )
]

但这很烦人。我找不到一个负责解析的functionmethodclass。 有没有一种简单的方法来改变这个解析器基于路径的行为,这样如果 intopenapi.TYPE_INTEGER 将被返回,而不是 string?

答案

自动确定参数类型 在某些情况下如果检测失败,就会回到字符串。

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文档

关于路径和自定义装饰器的 Python3 Django 问题

在自定义模板标签中解析 Django 自定义模板标签

django-模板之自定义模板路径

如何使用 django_graphene 解析 django 模型的自定义字段?