Загрузка...

How to do the put method correctly? (Updating user data)

Thread in Python created by IFearNobody Jan 3, 2025. 282 views

  1. IFearNobody
    IFearNobody Topic starter Jan 3, 2025 179 Dec 14, 2022
    Есть такая задача:
    Есть модель UserStructure, в ней есть поля которые нельзя обновлять. Как сделать ограничение на редактирование определенных полей?


    Python
    @router.put(
    path='/me',
    status_code=status.HTTP_200_OK,
    description='Обновляет информацию своего профиля'
    )
    async def get_my_account(
    current_user: Annotated[UserStructure, Depends(get_current_user)],
    new_data: UserStructure = Body(..., description='Новые данные пользователя')
    ) -> JSONResponse:
    ...
    Модель:

    Python
    class UserStructure(BaseModel):
    id: int | None = Field(None, description='Уникальный идентификатор пользователя')
    login: str = Field(..., description='Логин пользователя')
    name: str = Field(..., description='Имя пользователя')
    surname: str = Field(..., description='Фамилия пользователя')
    email: str = Field(..., description='Электронная почта')
    phone_number: str = Field(..., description='Номер телефона')
    group_id: int = Field(..., description='ID группы (например: Администраторы, Курьеры, Бухгалтеры)')
    city_id: int = Field(..., description='ID города')
    prefix: str = Field(..., description='Префикс для идентификации')
    password_hash: str = Field(..., description='Хеш пароля, сами пароли не храним')
    status: str | None = Field(None, description='Статус пользователя')
    two_factor: bool = Field(False, description='Включена ли двухфакторная аутентификация')
    is_blocked: bool = Field(False, description='Заблокирован ли пользователь')
    requires_password_reset: bool = Field(False, description='Требуется ли смена пароля при следующем входе')
    created_at: datetime = Field(..., description='Дата создания пользователя')

    К примеру, нужно сделать так что бы created_at невозможно было редактировать.
     
  2. RUPTES
    RUPTES Jan 3, 2025 Нечего тут смотреть... 56 Jan 23, 2019
    Field(..., const=True)
     
    1. View previous comments (1)
    2. IFearNobody Topic starter
      RUPTES, такого чуда нет в функции Field)
    3. IFearNobody Topic starter
      RUPTES, он называется "exclude" а не "const"
  3. TheAzot
    Это прикол фаст апи, даже если в сваггере ты можешь изменять то в бд все будет окей главное поставить default
    The post was merged to previous Jan 4, 2025
    Для этого примера делаешь two_factor: bool = Field(False, description='Включена ли двухфакторная аутентификация', default=False) - и все
     
  4. GERO777
    GERO777 Jan 4, 2025 482 Apr 23, 2017
     
  5. ezbooz
    ezbooz Jan 4, 2025 997 Mar 29, 2018
    новую схему пайдантика просто сделай для апдейта с нужными полями
     
Top
Loading...