之前FastAPI(七十)实战开发《在线课程学习系统》接口开发--留言功能开发分享了留言开发,这次我们分享查看留言
梳理这里的逻辑,这个接口要依赖登录。
梳理后发现,之前在接口设计的时候,有些欠缺,查看留言,是查看单个的留言,查看留言后,对应的留言变成已读状态。那么我们这个都需要传递一个参数,这个参数应该是留言的id。
1.判断用户是否登录 2.判断对应id是否存在,不存在返回对应的错误 3.判断是否是当前用户的留言,或者接受的方是自己 4.返回内容后,同时变成已读。 5.如果读了且回复了,要带回复的内容
在之前设计返回状态码的时候,发现状态码有缺失,我们增加下缺失的。
状态码 | 含义 |
200 | 成功 |
100601 | 留言不存在 |
100602 | 权限不足 |
最后的pydantic代码
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]=[]
根据最后梳理的逻辑去开发对应的功能。
@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))
每个功能开发,都会梳理好对应的逻辑功能梳理。快速的进行开发。