FastAPI(七十一)实战开发《在线课程学习系统》接口开发-- 查看留言

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统"

之前FastAPI(七十)实战开发《在线课程学习系统》接口开发--留言功能开发分享了留言开发,这次我们分享查看留言

梳理这里的逻辑,这个接口要依赖登录。

梳理后发现,之前在接口设计的时候,有些欠缺,查看留言,是查看单个的留言,查看留言后,对应的留言变成已读状态。那么我们这个都需要传递一个参数,这个参数应该是留言的id。

1.判断用户是否登录

2.判断对应id是否存在,不存在返回对应的错误

3.判断是否是当前用户的留言,或者接受的方是自己

4.返回内容后,同时变成已读

5.如果已读且回复了,要带回复的内容

在之前设计返回状态码的时候,发现状态码有缺失,我们增加下缺失的。

状态码含义
200成功
100601留言不存在
100602权限不足

首先是pydantic参数模型以及响应模型

class Messages(BaseModel):id: intsend_user: straccept_user: strread: boolsend_time: stradd_time: strcontext: strclass MessagePid(Messages):pid: intclass MessageOne(Messages):pid: List[MessagePid] = []

然后实现逻辑:message_method.py增加如下

def get_msg_by_id(db, msg_id):return db.query(Message).filter(Message.id == msg_id, Message.status == 0).first()def get_pid_message(db, msg_id):# 获取某条消息被回复的所有消息return db.query(Message).filter(Message.pid == msg_id, Message.status == 0).all()def view_msg_method(msg_id: int, user: UsernameRole, db: Session):"""查看留言(回复的消息和留言在一个表里,结构一样)"""msg = get_msg_by_id(db, msg_id)if not msg:return response(code=100601, message="留言不存在")db_user = get_by_username(db, user.username)if msg.accept_user != db_user.id:return response(code=100602, message="权限不足")msg.read = Truedb.commit()db.refresh(msg)all_pid_messages = get_pid_message(db, msg_id)  # 查询所有回复的消息message_one = MessageOne(id=msg.id,send_user=get_by_uid(db, msg.send_user).username,accept_user=get_by_uid(db, msg.accept_user).username,read=msg.read,send_time=msg.send_time,add_time=str(msg.add_time),context=msg.context)# ① 留言没有被回复消息if not all_pid_messages:return response(data=message_one.dict())# ② 留言有被回复的消息,那么需要将回复的消息带回to_client = []for _ in all_pid_messages:msg_pid = MessagePid(id=msg.id,send_user=get_by_uid(db, _.send_user).username,accept_user=get_by_uid(db, _.accept_user).username,read=_.read,send_time=_.send_time,add_time=str(_.add_time),context=_.context,pid=_.pid)to_client.append(msg_pid)message_one.pid = to_clientreturn response(data=message_one.dict())

最后实现接口

@message_router.get("/", summary="查看留言")
async def view_message(msg_id: int,user: UsernameRole = Depends(get_current_user),db: Session = Depends(create_db)
):return view_msg_method(msg_id, user, db)

测试:

以上则是实现查看留言的接口逻辑

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络服务与应用

一、 文件传输 FTP 1、FTP采用典型的C/S架构(即服务器端和客户端模型),客户端与服务器端建立TCP连接之后即可实现文件的上传、下载。 2、FTP传输过程 1)、主动模式(POST):入站连接 2&#x…

SqlSugar删除没有定义主键的实体类对应的数据库表数据

一般而言,使用SqlSugar的DbFirst功能创建数据库表实体类时,如果数据库表有主键,生成的实体类对应属性也会标识为主键,如下图所示。   但有时候生成的实体类没有自动配置主键,这时可以通过以下方式进行删除操作&…

【计算机网络】HTTP协议实验

一:实验目的 1:理解HTTP协议的基本工作原理。 2:使用Wireshark或其他抓包工具捕获并分析HTTP数据包,理解HTTP通信的具体过程。 3:通过分析抓包数据,识别常见的HTTP状态码及其含义。 二:实验仪…

光伏电站的运维经验

选择逆变器一是要看产品本身的效率和品质;二是要看系统的架构,怎么做的更简单,更可靠;三是要看场景的适应性;四是看服务。箱式逆变房后期运维无需协调多个厂家,大大提升了运维效率。相比自制土建房&#xf…

02集成开发工具配置VScode SSH连接Ubuntu20.04 - 输入密码连接

文章目录 1. running the VScode in Admin mode2. Install the plugin3. New Remote4. Enther the command at the top blanket column in VS Code5. Setup the ssh config file6. Restart VScode7. Connect to the Server8. Open the remote folder 1. running the VScode in …

简单了解反射

反射 文章目录 反射获取class对象的三种方式利用反射获取构造方法利用反射获取字段(成员变量)利用反射获取成员方法反射的作用 获取class对象的三种方式 ①Class.forName(“全类名”);(源代码阶段使用) ②类名.class&#xff08…

Linux中如何用ida调试fork后的子进程

原文链接 > https://redqx.github.io/linux/2024/07/24/linux-debugfork.html 本文的一些图片引用可能有一些问题, 比如数据不对劲,但无伤大雅 自己懒得粘贴图片了 环境: wsl-kali-2024 ida-7.7 插件: Lazy_ida, 还有一个什么插件不知道什么名字, 可以把汇编转字节码 …

Elasticsearch概念及ELK安装

1、Elasticsearch是什么 它是elastic技术栈中的一部分。完整的技术栈包括: Elasticsearch:用于数据存储、计算和搜索 Logstash/Beats:用于数据收集 Kibana:用于数据可视化 整套技术栈被称为ELK,经常用来做日志收集…

python题解

宽度与对齐 输出455、-123、987654,宽度为5,分别左对齐和右对齐 格式 输入格式: 无 输出格式: 输出为整型,空格分隔。每个数的输出占一行 样例 1 输入: 无 复制 输出: 455 455 -123 -123 98…

【MySQL进阶篇】锁:全局锁、表级锁以及行级锁

一、锁的概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须要解决的一个问题&am…

室内消防逃生通道占用检测AI算法:科技筑防,守护生命通道

随着城市化进程的加快,高层建筑和大型公共场所的数量急剧增加,消防安全问题愈发凸显。其中,室内消防逃生通道的畅通性直接关系到火灾发生时人员的安全疏散。然而,由于各种原因,如杂物堆放、车辆停放等,消防…

LeetCode 2844.生成特殊数字的最少操作(哈希表 + 贪心)

给你一个下标从 0 开始的字符串 num ,表示一个非负整数。 在一次操作中,您可以选择 num 的任意一位数字并将其删除。请注意,如果你删除 num 中的所有数字,则 num 变为 0。 返回最少需要多少次操作可以使 num 变成特殊数字。 如…

前端知识--前端访问后端技术Ajax及框架Axios

一、异步数据请求技术----Ajax Ajax是前端访问后端的技术,为异步请求(不刷新页面,请求数据,只更新局部数据)。 例如:在京东网站中搜索电脑,就会出现一些联想搜索,但此时页面并没有…

Window下CLion实现本机通过socket通信-C++

1.引言-什么是socket socket即套接字,用于描述地址和端口,是一个通信链的句柄。应用程序通过socket向网络发出请求或者回应。 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字&#xff…

go语言开发Prometheus Exporter(DM数据库)

一、介绍 源码步骤基于dameng_exporter源码讲解,看完本篇文章可以直接进行二次开发。 dameng exporter的开源地址:https://github.com/gy297879328/dameng_exporter(可直接对接prometheusgrafana 提供表盘) 开发一个exporter 其…

Linux中的三类读写函数

文件IO和标准IO的区别 遵循标准: 文件IO遵循POSIX标准,主要在类UNIX环境下使用。标准IO遵循ANSI标准,具有更好的可移植性,可以在不同的操作系统上重新编译后运行。可移植性: 文件IO的可移植性相对较差,因为…

基于大模型零代码1小时完成国标数据分级分类近义词库构建及思考

1. 任务背景及困难分析 因项目要求,需要对国家标准国民经济行业分类-GB/T 4754-2017【1】进行近义词库的构建,时间非常紧,只给了很短时间进行处理,目标是构建一份中等粒度的行业近义词库。 搁在以前,可能需要点时…

Linux 安装mysql-client-core-8.0

在Linux上安装mysql-client-core-8.0 安装流程 下面是安装mysql-client-core-8.0的步骤和相应的命令: 步骤1:更新系统软件源 我们首先需要更新系统的软件源,以确保我们能够获取到最新的软件包列表。使用以下命令更新软件源: …

Ansible——inventory 主机清单

1、inventory 含义 Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。 如果是名称类似的主机,可以使用列表的方式标识各个主机。 vim /etc/ansible/hosts [webservers] 192.168.20.11:222…

平凯星辰亮相 2024 中国国际金融展,发布银行交易明细查询白皮书

7 月 19 日至 21 日,备受瞩目的 2024 中国国际金融展(以下简称金融展)在北京国家会议中心隆重举办。作为中国乃至亚洲最大的金融科技展会,本届金融展以“数字金融引领未来,守正创新共筑金融新生态”为主题,…