热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

文章接口

用户关注列表(难点)原型效果图需求分析:内容:互相关注和已关注举例:当前用户:curry关注列表:kobe&#

用户关注列表(难点)


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

  • 需求分析:

    • 内容:互相关注和已关注
    • 举例:当前用户: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 Resourceclass CommentResource(Resource):"""发布评论接口类视图 [主+子评论]"""# 1. 获取参数# 1.1 user_id 当前登录用户iduser_id = g.user_id# 1.2 article_id 文章idparser = 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": }


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
author-avatar
斌仔151
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有