FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发
在之前的文章:FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发,今天实战:用户 个人信息接口开发。
在开发个人信息接口的时候,我们要注意了,因为我们不一样的用户个人信息不一样,而且需要依赖登录,那么我们需要根据用户是否登录来返回用户信息,根据用户的角色来返回对应的信息,
1 2 | def get_role_name(db:Session, id : id ): return db.query(Role). filter (Role. id = = id ).first() |
校验下登录。因为我们的token在生成的时候,我们存储了用户的信息,那么我们现在看下如何根据token获取用户的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | async def get_cure_user(request: Request, token: Optional[ str ] = Header(...), db: Session = Depends(get_db)) - > UsernameRole: credentials_exception = HTTPException( status_code = status.HTTP_401_UNAUTHORIZED, detail = "验证失败" ) credentials_FOR_exception = HTTPException( status_code = status.HTTP_403_FORBIDDEN, detail = "用户未登录或者登陆token已经失效" ) try : payload = jwt.decode(token, SECRET_KEY, algorithms = [ALGORITHM]) username: str = payload.get( "sub" ) if username is None : raise credentials_exception useris = await request.app.state.redis.get(username) if not useris and useris! = token: raise credentials_FOR_exception userrole = get_role_name(db,get_user_username(db, username).role).name user = UsernameRole(username = username,role = userrole) return user except JWTError: logger.error(traceback.format_exc()) raise credentials_exception |
这里就是获取用户信息用户名和对应的角色。这是判断登陆时候可以返回的。
UsernameRole是集成UserBase的pydantic对象。
1 2 | class UsernameRole(UserBase): role: str |
这样判断了登录并且呢也返回了用户的角色,那么我们对应的开发的个人信息的接口就可以进行开发。
1 2 3 4 5 6 7 8 9 10 11 12 | @usersRouter .get(path = '/getcuruser' ,response_model = UserBase) async def getcuruser(user:UsernameRole = Depends(get_cure_user),db: Session = Depends(get_db)): user_name = get_user_username(db,username = user.username) data = {} data[ 'username' ] = user_name.username data[ 'sex' ] = user_name.sex data[ 'age' ] = user_name.age if user.role = = "学生" : data[ 'studentnum' ] = user_name.studentnum else : data[ 'jobnum' ] = user_name.jobnum return reponse(code = 200 ,message = '成功' ,data = data) |
这样我们就返回了登陆用户的信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
2018-02-27 Jenkins +git +python 进行持续集成进行接口测试(接口测试jenkins持续集成篇)
2017-02-27 美团面试总结