@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路由,用于检查用户信息的可用性。让我来解释一下:
-
该路由使用POST方法,接受一个路径参数
col
,表示要检查的用户信息类型(name、email、phone)。 -
它还接受一个数据库会话
db
,以及一个用户信息模式obj
作为参数。 -
根据传入的
col
参数,它会调用不同的函数来检查用户名、邮箱或手机号的可用性,并返回相应的JSON响应。 -
如果
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
这些函数用于检查用户名、邮箱和手机号的可用性。让我来解释一下:
-
checkUsernameAvailability
函数接受一个数据库会话(db)、一个用户名(username)和一个可选的排除用户ID(exclude_id)。它会查询数据库中是否存在与给定用户名相同的未删除用户,如果存在则返回False,否则返回True。 -
checkEmailAvailability
函数与上述函数类似,不同之处在于它检查的是邮箱的可用性。 -
checkPhoneAvailability
函数也是类似的,不同之处在于它检查的是手机号的可用性。
这些函数都使用了SQLAlchemy的查询语法,通过对数据库进行查询来判断用户名、邮箱和手机号是否可用。
配置
shema
class UserAvailabilitySchema(BaseModel):
data: str
exclude_user_id: int = None
这个UserAvailabilitySchema
类是一个Pydantic模型,用于验证用户信息的可用性。让我来解释一下:
-
它继承自
BaseModel
,这意味着它是一个Pydantic模型,可以用来定义数据的结构和验证数据的有效性。 -
它有两个属性:
data
:表示用户信息,是一个字符串类型。exclude_user_id
:表示要排除的用户ID,是一个整数类型,默认值为None。
这个模型的作用是在用户查询信息可用性时,验证传入的数据是否符合要求。