Django drf-Spectular - Можете ли вы исключить определенные пути?
У нас есть несколько API с разными версиями в urls.py, например
- api / v1
- api / v2
- api / v3
. Мы хотим реализовать чванство с помощью drf-spectular, но мы хотим только предоставить доступ к конечным точкам api / v3.
Есть ли способ сделать это? Я не могу понять документацию.
Спасибо
4 ответа
Это работает для меня:
def preprocessing_filter_spec(endpoints):
filtered = []
for (path, path_regex, method, callback) in endpoints:
# Remove all but DRF API endpoints
if path.startswith("/api/"):
filtered.append((path, path_regex, method, callback))
return filtered
В настройках:
"PREPROCESSING_HOOKS": ["common.openapi.preprocessing_filter_spec"],
Вы также можете исключить его с помощью следующего:
from drf_spectacular.utils import extend_schema
...
@extend_schema(
exclude=True
)
@api_view(['GET'])
def my_view(request):
# your code here
Или вы можете исключить весь набор представлений:
@extend_schema_view(
list=extend_schema(exclude=True),
retrieve=extend_schema(exclude=True),
create=extend_schema(exclude=True),
update=extend_schema(exclude=True),
partial_update=extend_schema(exclude=True),
destroy=extend_schema(exclude=True)
)
В деталях:
Создайте файл в том же каталоге, где находится settings.py. Допустим, имя файла — exclude_path.py.
1- Добавьте в exclude_path.py:
вот схема — это путь, который мы не хотим показывать в выводе документов.
def custom_preprocessing_hook(endpoints):
filtered = []
for (path, path_regex, method, callback) in endpoints:
if "schema" not in path:
filtered.append((path, path_regex, method, callback))
return filtered
2- настройки.py
SPECTACULAR_SETTINGS = {
'PREPROCESSING_HOOKS': ["djapi.excluded_path.custom_preprocessing_hook"]
}
Разобрался. Скопировал пользовательскую функцию перехвата предварительной обработки, изменил инструкцию pass, чтобы отфильтровать то, что мне не требовалось в конечных точках, затем сопоставил расположение файла и функции в моих впечатляющих настройках для предварительно обработанных перехватчиков.