[英]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
?
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()
和 go 並根據變量名替換類型。
要使用此 class,您將需要自己的OpenAPISchemaGenerator
。
- 使用自定義 OpenAPISchemaGenerator
- 用您自己的 EndpointEnumerator 覆蓋其 endpoint_enumerator_class
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.