Для того чтобы вернуть доступ к Swagger и создать кастомную статику для документации (swagger, redoc) в FastAPI, нам нужно реализовать несколько шагов.
Шаг 1: Установка FastAPI и зависимостей
Первым делом необходимо установить FastAPI и uvicorn (для запуска приложения FastAPI):
pip install fastapi uvicorn
Затем необходимо установить зависимости для работы с Swagger и Redoc:
pip install fastapi.openapi fastapi.templating starlette
Шаг 2: Создание приложения FastAPI
Создаем файл main.py и инициализируем приложение FastAPI:
from fastapi import FastAPI
app = FastAPI()
Шаг 3: Добавление Swagger и Redoc
Чтобы добавить доступ к Swagger и Redoc, необходимо добавить соответствующие маршруты в приложение:
from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html
from fastapi.openapi.utils import get_openapi
@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui_html():
return get_swagger_ui_html(openapi_url="/openapi.json", title="Swagger UI")
@app.get("/redoc", include_in_schema=False)
async def redoc_html():
return get_redoc_html(openapi_url="/openapi.json", title="Redoc")
Здесь мы добавляем два маршрута /docs и /redoc для Swagger и Redoc соответственно.
Шаг 4: Указание путей к документации
Далее необходимо указать путь к документации, которую будем использовать для Swagger и Redoc:
from fastapi.responses import HTMLResponse
@app.get("/openapi.json", include_in_schema=False)
async def get_open_api_endpoint():
return JSONResponse(get_openapi())
@app.get("/", response_class=HTMLResponse)
async def home():
return """
<html>
<head>
<title>Custom Documentation</title>
</head>
<body>
<h1>Welcome to Custom Documentation</h1>
<p><a href="/docs">Swagger UI</a></p>
<p><a href="/redoc">Redoc</a></p>
</body>
</html>
"""
Шаг 5: Запуск приложения
Теперь необходимо запустить приложение FastAPI с помощью uvicorn:
uvicorn main:app --reload
После запуска приложения можно открыть браузер и перейти по адресу http://127.0.0.1:8000/, чтобы увидеть кастомную статику для документации, а также доступ к Swagger и Redoc.
Теперь у вас есть доступ к Swagger и кастомной статике для документации в вашем приложении FastAPI. Надеюсь, что этот туториал был полезен!
Превосходная подача материала! Всё подробно и в то же время ничего лишнего. Преподавать ваше призвание! Спасибо за курс.
Лайк на 2-й минуте. Спасибо!
Обидно другое, зачем вообще было делать внешнюю зависимость? Развернул внутри периметра, обращается с ПК без инета и всё, нет документации.
А мне просто остановка загрузки страницы и её дальнейшая загрузка помогают
Столкнулся сегодня с этой проблемой при развертывании на удаленном хосте! Думал, что это фастапи шалит, но видимо дело было все-таки в статике. Спасибо, Сурен, как всегда, всё по полочкам разложил!
Тупа лучший!
Спасибо, Сурен. Все четко: есть проблема и есть такое решение. Мы похожую проблему решили добавлением в контейнер приложения локальной статики js+css
у нас была такая проблема где-то полгода назад. мы скачали статику, положили в папку с проектом, все запаковали в контейнер и с тех пор только так и пользуемся
Подмечу что проблема впринципе со swagger, это и в django-ninja и в litestar такая же проблема была)