Переменная цикла user затеняет параметр функции. Строка '200' становится телом JSON-ответа, а не устанавливает HTTP-статус; статус задавайте отдельно.
Возврат значений функции в FastAPI
Переменная цикла 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 и обработка конфликта вставки, а не глобальный список.