fastapi用户登录模块——“查询用户信息可用性“

@router.post("/check/{col}/availability", summary="查询用户信息可用性")
async def checkUserAvailability(*,
                                col: str,
                                db: Session = Depends(deps.get_db),
                                obj: user_info_schemas.UserAvailabilitySchema
                                ):
    if col == "name":
        availability = curd_user.checkUsernameAvailability(db, username=obj.data, exclude_id=obj.exclude_user_id)
        return respSuccessJson({'availability': availability, 'alter': "" if availability else "用户名已被使用"})
    elif col == "email":
        availability = curd_user.checkEmailAvailability(db, email=obj.data, exclude_id=obj.exclude_user_id)
        return respSuccessJson({'availability': availability, 'alter': "" if availability else "邮箱已被使用"})
    elif col == "phone":
        availability = curd_user.checkPhoneAvailability(db, phone=obj.data, exclude_id=obj.exclude_user_id)
        return respSuccessJson({'availability': availability, 'alter': "" if availability else "手机号已被使用"})
    else:
        raise HTTPException(status_code=404, detail="url not found")

这段代码是一个FastAPI路由,用于检查用户信息的可用性。让我来解释一下:

  1. 该路由使用POST方法,接受一个路径参数col,表示要检查的用户信息类型(name、email、phone)。

  2. 它还接受一个数据库会话db,以及一个用户信息模式obj作为参数。

  3. 根据传入的col参数,它会调用不同的函数来检查用户名、邮箱或手机号的可用性,并返回相应的JSON响应。

  4. 如果col参数不是上述三者之一,它会抛出一个HTTP异常,状态码为404,表示URL未找到。

总的来说,这段代码实现了一个用于查询用户信息可用性的API路由。

    def checkUsernameAvailability(self, db: Session, *, username: str, exclude_id: int = None):
        obj = db.query(func.count(self.model.id).label('count')).filter(
            self.model.is_deleted == 0, self.model.username == username)
        if exclude_id:
            obj.filter(self.model.id != exclude_id)
        return obj.scalar() == 0

    def checkEmailAvailability(self, db: Session, *, email: str, exclude_id: int = None):
        obj = db.query(func.count(self.model.id).label('count')).filter(
            self.model.is_deleted == 0, self.model.email == email)
        if exclude_id:
            obj.filter(self.model.id != exclude_id)
        return obj.scalar() == 0

    def checkPhoneAvailability(self, db: Session, *, phone: str, exclude_id: int = None):
        obj = db.query(func.count(self.model.id).label('count')).filter(
            self.model.is_deleted == 0, self.model.phone == phone)
        if exclude_id:
            obj.filter(self.model.id != exclude_id)
        return obj.scalar() == 0

这些函数用于检查用户名、邮箱和手机号的可用性。让我来解释一下:

  1. checkUsernameAvailability函数接受一个数据库会话(db)、一个用户名(username)和一个可选的排除用户ID(exclude_id)。它会查询数据库中是否存在与给定用户名相同的未删除用户,如果存在则返回False,否则返回True。

  2. checkEmailAvailability函数与上述函数类似,不同之处在于它检查的是邮箱的可用性。

  3. checkPhoneAvailability函数也是类似的,不同之处在于它检查的是手机号的可用性。

这些函数都使用了SQLAlchemy的查询语法,通过对数据库进行查询来判断用户名、邮箱和手机号是否可用。

配置
shema

class UserAvailabilitySchema(BaseModel):
    data: str
    exclude_user_id: int = None

这个UserAvailabilitySchema类是一个Pydantic模型,用于验证用户信息的可用性。让我来解释一下:

  1. 它继承自BaseModel,这意味着它是一个Pydantic模型,可以用来定义数据的结构和验证数据的有效性。

  2. 它有两个属性:

    • data:表示用户信息,是一个字符串类型。
    • exclude_user_id:表示要排除的用户ID,是一个整数类型,默认值为None。

这个模型的作用是在用户查询信息可用性时,验证传入的数据是否符合要求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值