FastAPI: не удается заставить обработку ошибок работать должным образом - PullRequest
1 голос
/ 11 июля 2020

Я просто изучаю FastAPI (и люблю его), поэтому вполне вероятно, что я делаю что-то не так. Но вот моя проблема:

В приведенном ниже фрагменте кода я создаю нового пользователя, если пользователя уже нет.

Код работает нормально, но у меня проблемы с обработкой ошибок. Ошибки правильно передаются во внутренние документы FastAPI или в клиент API, такой как Postman, но не обратно в фактический клиент, который я использую, или в командную строку.

@app.post("/users/", response_model=schemas.User)
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
    db_user = crud.get_user_by_username(db, username=user.username)
    if db_user:
        raise HTTPException(
            status_code=400, detail=f"Username '{user.username}' already registered"
        )
    return crud.create_user(db=db, user=user)

Если я использую автоматически сгенерированные документы FastAPI (или Postman) и отслеживаю ответ таким образом, я получаю ожидаемую ошибку:

Proper error response in API docs

But when I look at what I am receiving at the client end (Vue) or what the uvicorn server is logging, it does not contain that information:

Регистрируется неверный ответ об ошибке

Как видите, он просто говорит Bad Request вместо ответа JSON dict {"detail": "Username 'miketest' already registered"}

Что я делаю не так? Что я могу сделать, чтобы убедиться, что возвращается полная информация HTTPException? Я почти уверен, что проблема связана с FastAPI, потому что клиент получает именно то, что выводит сервер.

Ответы [ 2 ]

2 голосов
/ 12 июля 2020

Этот снимок экрана принадлежит журналу консоли и не будет содержать ответа API, ответа JSON.

Вы можете увидеть фактический ответ, если отправите запрос API с помощью какой-то клиент, например POSTMAN .

0 голосов
/ 19 июля 2020
• 1000 имеет ту же проблему.

Решение:

    try {
      await api().post('register',JSON.stringify(data);
    } catch (err) {
      error = err.response.data.detail;
    }

То есть, ошибка , отправленная из FastAPI, представляет собой объект, который имеет response, в нем data, а в нем detail.

Ответ от Почтальона или чего-то подобного просто дает объект с detail. Я не видел, что был средний слой data, и у меня были проблемы с просмотром всего объекта изнутри Vue.

...