文章接口

14 篇文章 1 订阅
7 篇文章 0 订阅

用户关注列表(难点)

  • 原型效果图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 需求分析:

    • 内容:互相关注和已关注
    • 举例:当前用户:curry 关注列表:kobe,james 粉丝列表:durant,Kobe
  • 思路分析:

    • 数据库表分析
    • 查询用户关注列表获得fans对象,再通过fa获取author_id
    • 查询用户粉丝列表得到author对象,在通过author获取fans_id
    • 遍历(嵌套)两个列表,用户的id是否相等判断时互相关注还是已关注
  • 接口实现

# 1. 获取参数
usr_id = g.user_id
page
per_age
# 2. 参数校验
# 逻辑处理
# 3.1 根据user_id查询用户和关系表的用户数据:user.id,user.name,user.profile,fans_count
# 按照关注时间降序排序,实现数据分页--关注列表
# 3.2 根据user_id查询粉丝列表
# user_id 代表作者
# Relation.author_id == usr_id 作者id相等
# 
# 3.3 遍历关注和粉丝列表,如果id值相等代表互相关注
# 4. 返回处理
# 4.1 返回关注的作者字典列表

发布主评论

  • 原型效果
    • 需求分析
    • 表字段分析
  • 接口设计
    • 请求参数:user_id:当前用户id
      • article_id:文章id
      • content:评论内容
    • 区分主子评论
      • parent_id == 0 :主评论
      • parent_id != 0:子评论
from flask_restful import Resource

class CommentResource(Resource):
    """发布评论接口类视图 [主+子评论]"""
    # 1. 获取参数
    # 1.1 user_id 当前登录用户id
    user_id = g.user_id
    # 1.2 article_id 文章id
    parser = ResquestParser()
    parser.add_argument("article_id", type=int, required=True, location='json')
    parser.add_argumemt("content", type= regex(r'.+'), required=True, location='json')
    ret = parser.parse_args()
    # 1.3 content 评论内容
    comment_content = ret["content"]
    # 2. 参数校验-json传递参数
    # 3. 逻辑处理
    # 3.1 根据user_id,article_id,content,parent_id=0创建一条主评论,添加到数据库
    comment_obj = Coment(user_id=user_id,
           article_id=article_id,
          content=comment_content,
          parent_id=0)
    db.session.add(comment_obj)
    # 3.2 根据article_id查询文章更新comment_count文章的评论数量[反范式设计]
    Article.query.filter(Article.id == article_id).update({"comment_count": Article.comment_count + 1})
    # 3.3 提交到数据库
    try:
        db.session.commit()
    expect Exception as e:
        db.session.rollback()
        return {"message": "发布主评论数据库异常:{}".format(e)}, 507
    # 4 返回值处理
    # 4.1 返回评论id和文章id字典
    return {"comment_id": comment_obj.id,
           "article_id": article_id,
           "message": "发布评论成功"}

查询主评论列表

  • 产品原型图:

  • 需求分析:

    • 表分析:User表和Comment表

    • 功能分析:

      • 上拉刷新

        • 请求参数offset = 0
        • 响应字段 last_id = 0 该组数据最后一条的主键
      • 下拉加载更多

        • 请求参数offset = 上一组数据返回的last_id
        • 响应字段 last_id = 该组数据最后一条的主键
    • 方案:时间戳

  • 思路分析:

  • 接口设计:

    • 参数:article_id ,offset :评论的偏移id值, limit:限定查询的条数
# 核心代码:
parser = RequestParser()
parser.add_argument("article_id", type=int,required=True, location="args")
parser.add_argument("offset", type=int,required=True, location="args")
parser.add_argument("limit", type=int,defaulst=10, location="args")
ret = parser.parse_args()
article-id = ret["article_id"]
offset = ret["offset"]
limit = ret["limit"]
# 1. 查询评论数据来源于User表和Comment表--联合User表和COmment表
# 查询条件1:属于该文章的article_id下的所有主评论
# 查询条件2:评论id > offset 所有主评论
# 查询条件3:主评论 parent_id == 0
# 分页
comment_list = db.session.query(Comment.id,
                Comment.user_id = user_id,
                Comment.like_count,
                Comment.content,
                Comment.ctime,
                Comment.reply_count,
                User.name,
                user.profile_photo)
	.join(User, Comment_id == User.id)
    .filter(Comment.article_id == article_id,
            Comment_id > offset,
            Comment.parent_id == 0).limit(limit).all()
# 2. 获取当前页最后一条评论的id
comment_list[-1].id if comment_list else 0
# 3. 获取总的评论数量
comment_count = Comment.query.filter(Comment.article_id == article_id == article, Comment == parent_id ==0).count()
# 4. 数据库中最后一条评论的id值
end_comment = Comment.query.filter(Comment.article_id == article_id,
                    Comment.parent_id == 0)
	.order_by(Comment.id.desc()).first()

comment_dict_list = [{}for comment in comment_list]
return {"commets": comment_dict_list,
       "last_id": }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值