Возврат значений функции в FastAPI

Переменная цикла user затеняет параметр функции. Строка '200' становится телом JSON-ответа, а не устанавливает HTTP-статус; статус задавайте отдельно.

Короткий ответ

Что ответить на собеседовании

Переменная цикла user затеняет параметр функции. Строка '200' становится телом JSON-ответа, а не устанавливает HTTP-статус; статус задавайте отдельно.

Подробный разбор

Ответ с пояснениями

Условие

Какой результат должна выдавать функция post_user и какие формы ответов поддерживает FastAPI.

@app.post('/create_user')
async def post_user(user: User):
    for user in users:
        if user["email"] == user.email:
            return 'email already used'
    users.append(user.model_dump())
    print(users)
    return '200'

Ответ

Переменная цикла user затеняет параметр функции. Строка '200' становится телом JSON-ответа, а не устанавливает HTTP-статус; статус задавайте отдельно.

При непустом users, содержащем словари, обращение user.email вызовет AttributeError: в цикле user уже не Pydantic-модель. При пустом списке исходный код добавит пользователя и вернёт JSON-строку "200".

Исправление для учебного хранилища:

from fastapi import HTTPException

@app.post('/create_user', status_code=201)
async def post_user(user: User):
    if any(existing['email'] == user.email for existing in users):
        raise HTTPException(status_code=409, detail='Email уже используется')
    users.append(user.model_dump())
    return {'email': user.email}

FastAPI поддерживает сериализуемые значения, модели и объекты Response. Не возвращайте и не печатайте секретные поля. В production нужны БД, уникальное ограничение email и обработка конфликта вставки, а не глобальный список.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее