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

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

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

获取列表,也需要登录,根据登录用户来获取对应的留言,逻辑梳理如下:

1.判断用户是否登录

2.根据登录用户查询留言列表

3.留言列表中要根据是留言回复,进行列表重组

首先,在message_method.py中实现主要逻辑

def get_msg_list(db: Session, uid: int):
    # 查询留言+回复
    return db.query(Message).filter(or_(Message.send_user == uid, Message.accept_user == uid)).filter(Message.status == 0).all()


def list_msg_method(user: UsernameRole, db: Session):
    """获取留言列表"""
    db_user = get_by_username(db, user.username)
    msg_list = get_msg_list(db, db_user.id)  # 获取与当前用户相关留言/回复
    to_client = []
    main_msg_id_list = []
    if msg_list:
        for _ in msg_list:
            # ① 如果是留言
            if _.pid is None:
                message_one = MessageOne(
                    id=_.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
                )
                main_msg_id_list.append(_.id)  # 保存非回复信息的id,即留言信息的id
                # 查询该留言信息的所有回复信息,并将回复信息一并返回
                all_pid_messages = get_pid_message(db, _.id)
                if all_pid_messages:
                    to_client_pid_msgs = []
                    for _ in all_pid_messages:
                        message_pid = MessagePid(
                            id=_.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_pid_msgs.append(message_pid.dict())
                    message_one.pid = to_client_pid_msgs
                to_client.append(message_one.dict())
            # ② 如果是回复,查询该回复信息是否有主留言信息,如果有同上
            else:
                if _.pid not in main_msg_id_list:
                    _msg = get_msg_by_id(db, _.pid)
                    if _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 _all_pid_messages:
                            _pid_list = []
                            for each in _all_pid_messages:
                                _message_pid = MessagePid(
                                    id=each.id,
                                    send_user=get_by_uid(db, each.send_user).username,
                                    accept_user=get_by_uid(db, each.accept_user).username,
                                    read=each.read,
                                    send_time=each.send_time,
                                    add_time=str(each.acc_time),
                                    context=each.context,
                                    pid=each.pid
                                )
                                _pid_list.append(_message_pid.dict())
                            _message_one.pid = _pid_list
                        to_client.append(_message_one.dict())
    return response(data=to_client)

然后在message.py中实现接口:

@message_router.get("/list", summary="查询留言列表")
def view_message_list(
        user: UsernameRole = Depends(get_current_user),
        db: Session = Depends(create_db)
):
    return list_msg_method(user, db)

测试

查询留言列表完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值