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

2021-11-04 15:20:50 浏览数 (2)

前言

我们上一次分享了实战FastAPI(六十九)实战开发《在线课程学习系统》接口开发--留言功能开发,这次我们分析查看留言开发。

正文

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

代码语言:javascript复制
1.判断用户是否登录
2.判断对应id是否存在,不存在返回对应的错误
3.判断是否是当前用户的留言,或者接受的方是自己
4.返回内容后,同时变成已读。
5.如果读了且回复了,要带回复的内容

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

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

状态码

含义

200

成功

100601

留言不存在

100602

权限不足

最后的pydantic代码

代码语言:javascript复制
class Messages(BaseModel):
    id: int
    senduser: str
    acceptusers: str
    read: bool
    sendtime: str
    addtime: str
    context: str


class MessagePid(Messages):
    pid: int

class MessageOne(Messages):
    pid:List[MessagePid]=[]

根据最后梳理的逻辑去开发对应的功能。

代码语言:javascript复制
@usersRouter.get(path="/viewmessage")
async def viewmessage(id: int,
                      user: UsernameRole = Depends(get_cure_user),
                      db: Session = Depends(get_db)):
    useris=get_user_username(db,user.username)
    message = get_message(db, id)
    if not message:
        return reponse(code=100601, message='留言不存在', data='')
    if message.acceptusers != useris.id and message.senduser != useris.id:
        return reponse(code=100602, message='权限不足', data='')
    message.read = True
    db.commit()
    db.refresh(message)
    all_pid = get_pid_message(db, message.id)
    messageone = MessageOne(id=message.id,
                            senduser=get_user(db,message.senduser).username,
                            acceptusers=get_user(db, message.acceptusers).username,
                            read=message.read,
                            sendtime=message.sendtime,
                            addtime=str(message.addtime),
                            context=message.context)
    if len(all_pid) > 0:
        allpidlist = []
        for item in all_pid:
            message = MessagePid(id=message.id,
                                 senduser=item.senduser.username,
                                 acceptusers=item.acceptusers.username,
                                 read=item.read,
                                 sendtime=item.sendtime,
                                 addtime=item.addtime,
                                 context=item.context, pid=item.pid)
            allpidlist.append(message)
        messageone.pid = allpidlist
    return reponse(code=200, message='成功', data=jsonable_encoder(messageone))

每个功能开发,都会梳理好对应的逻辑功能梳理。快速的进行开发。

0 人点赞