```python
❌ Неправильно — возвращается вся модель пользователя
def get_user(user_id):
user = User.query.get(user_id)
return user Возвращает все поля: id, name, email, password_hash,
is_admin, created_at, updated_at, internal_notes
``````python
✅ Правильно — возвращается только необходимый набор полей
def get_user(user_id):
user = User.query.get(user_id)
return {
"id": user.id,
"name": user.name,
"email": user.email
}
``````json
{
"id": 123,
"name": "Иван Петров",
"avatar_url": "https://example.com/avatars/123.jpg"
}
``````json
{
"id": 123,
"name": "Иван Петров",
"email": "ivan@example.com",
"phone": "+7-999-123-45-67",
"password_hash": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8",
"address": "ул. Ленина, д. 1, кв. 5",
"passport_series": "1234",
"passport_number": "567890",
"bank_card_last4": "1234",
"internal_notes": "VIP-клиент, одобрен кредитный лимит 1 000 000 руб.",
"created_at": "2020-01-15T10:30:00Z",
"updated_at": "2026-07-04T14:20:00Z",
"is_admin": false
}
``````json
{
"name": "Новое имя",
"email": "new@email.com"
}
``````json
{
"name": "Новое имя",
"email": "new@email.com",
"is_admin": true
}
``````python
from pydantic import BaseModel
class UserPublic(BaseModel):
id: int
name: str
avatar_url: str | None
class UserPrivate(BaseModel):
id: int
name: str
email: str
phone: str
def get_user(user_id: int, requester: User) -> UserPublic | UserPrivate:
user = User.query.get(user_id)
if requester.id == user_id:
return UserPrivate.from_orm(user)
return UserPublic.from_orm(user)
``````graphql
query {
user(id: 123) {
id
name
avatar_url
email не запрашивается — не возвращается
}
}
``````python
ALLOWED_FIELDS = {"name", "email", "phone"}
def update_user(user_id: int, data: dict):
filtered_data = {k: v for k, v in data.items() if k in ALLOWED_FIELDS}
user = User.query.get(user_id)
for key, value in filtered_data.items():
setattr(user, key, value)
db.commit()
```