簡體   English   中英

自定義路徑參數解析 drf-yasg 和 Django

[英]Custom path parameter parsing drf-yasg and Django

我正在嘗試強制dry-yasg正確解析路徑中的參數。 假設我們有

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

在 swagger 文檔中,它不被視為int ,而是string

在此處輸入圖像描述

我用過

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

但這很煩人。 我找不到負責解析它的函數/方法/類。 是否有一種簡單的方法可以根據路徑更改此解析器的行為,以便如果發生int則將返回openapi.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()和 go 並根據變量名替換類型。

要使用此 class,您將需要自己的OpenAPISchemaGenerator

  • 使用自定義 OpenAPISchemaGenerator
  • 用您自己的 EndpointEnumerator 覆蓋其 endpoint_enumerator_class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM