2.4 Маршрутизация в FastAPI
15 из 15 шагов пройдено
38 из 38 баллов  получено

Также будет не мало важным рассмотреть следующую ситуацию. У нас есть код нашего приложения, включающий функцию user(), которая принимает имя пользователя, и функцию profile()она ничего не принимает. Но их пути находятся в одном каталоге адресного пути (user).

from fastapi import FastAPI

app = FastAPI()


@app.get("/user/{user_name}")
async def user(user_name: str) -> dict:
    return {"user": user_name}


@app.get("/user/profile")
async def profile() -> dict:
    return {"profile": "View profile user"}

В результате, если мы перейдем по адресу http://127.0.0.1:8000/user/ilya, то увидим следующий вывод функции user():

Но если мы перейдем по адресу http://127.0.0.1:8000/user/profile, то вывод будет не правильный, а именно вместо функции profile(), отработает функция user().

В этом случае произошло то,  что каталог пути(profile) рассматривался как значение параметра имени пользователя для функции user

Чтобы решить эту проблему, все фиксированные пути должны быть объявлены первыми перед URL-адресами динамических конечных точек с параметрами пути. Таким образом, функция profile() должна быть объявлена первой перед функцией user().

from fastapi import FastAPI

app = FastAPI()


@app.get("/user/profile")
async def profile() -> dict:
    return {"profile": "View profile user"}


@app.get("/user/{user_name}")
async def user(user_name: str) -> dict:
    return {"user": user_name}

В результате мы получим правильный вывод:


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Нет обсуждений. Начните первое.