实现了一个点赞功能的接口

代码解读

@app.post("/activities/{activity_id}/like", response_model=Like_Pydantic)
async def like_activity(activity_id: int, user: User_Pydantic):
  • @app.post("/activities/{activity_id}/like", response_model=Like_Pydantic):这是一个 FastAPI 路由装饰器,定义了一个 POST 请求接口。路径为 /activities/{activity_id}/like,其中 {activity_id} 是一个路径参数,表示活动的 ID。response_model=Like_Pydantic 指定了该接口的返回数据模型为 Like_Pydantic,这有助于自动进行数据验证和序列化。

  • async def like_activity(activity_id: int, user: User_Pydantic)::定义了一个异步函数 like_activity,它接收两个参数:
    • activity_id: int:活动的 ID,从路径参数中获取。

    • user: User_Pydantic:用户信息,类型为 User_Pydantic,这是一个 Pydantic 模型,用于验证和处理用户数据。

    activity = await Activity.get_or_none(id=activity_id)
  • await Activity.get_or_none(id=activity_id):使用 Tortoise ORM 的 get_or_none 方法异步查询活动表(Activity),尝试获取 id 等于 activity_id 的活动记录。如果找到记录,则返回该活动对象;如果没有找到,则返回 None

  • activity:存储查询到的活动对象。

    if not activity:
        raise HTTPException(status_code=404, detail="Activity not found")
  • 如果 activityNone(即未找到活动),则抛出一个 HTTPException 异常,状态码为 404,表示“未找到资源”,并附带详细信息 "Activity not found"

    like, created = await Like.get_or_create(user_id=user.id, activity_id=activity_id)
  • await Like.get_or_create(user_id=user.id, activity_id=activity_id):使用 Tortoise ORM 的 get_or_create 方法异步查询点赞表(Like),尝试获取一个用户(user_id)对该活动(activity_id)的点赞记录。
    • 如果已经存在这样的记录,则返回该记录和 created=False

    • 如果不存在,则创建一个新的点赞记录,并返回该记录和 created=True

  • like:存储查询或创建的点赞记录。

  • created:布尔值,表示是否创建了新的记录。

    if created:
        activity.like_count += 1
        await activity.save()
  • 如果 createdTrue(即新创建了点赞记录),则:
    • 将活动的 like_count(点赞数)加 1。

    • 调用 await activity.save() 异步保存活动对象的更新。

    return await Like_Pydantic.from_tortoise_orm(like)
  • await Like_Pydantic.from_tortoise_orm(like):将点赞记录(like)从 Tortoise ORM 对象转换为 Pydantic 模型对象,以便进行序列化和返回。

  • return:返回转换后的点赞记录数据,作为接口的响应。


总结

这段代码实现了一个点赞功能的接口:

  1. 接收活动 ID 和用户信息。

  2. 查询活动是否存在,如果不存在则返回 404 错误。

  3. 检查用户是否已经对该活动点过赞:
    • 如果没有点赞,则创建新的点赞记录,并将活动的点赞数加 1。

    • 如果已经点赞,则不做任何操作。

  4. 返回点赞记录的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值