前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发

FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发

作者头像
雷子
发布2021-10-22 11:06:58
6680
发布2021-10-22 11:06:58
举报

前言

我们上一次分享了实战FastAPI(六十六)实战开发《在线课程学习系统》接口开发--用户登陆接口开发,这次我们分享获取用户信息。

正文

在开发个人信息接口的时候,我们要注意了,因为我们不一样的用户个人信息不一样,而且需要依赖登录,那么我们需要根据用户是否登录来返回用户信息,根据用户的角色来返回对应的信息,

代码语言:javascript
复制
def get_role_name(db:Session,id:id):
    return db.query(Role).filter(Role.id == id).first()

校验下登录。因为我们的token在生成的时候,我们存储了用户的信息,那么我们现在看下如何根据token获取用户的信息

代码语言:javascript
复制
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对象。

代码语言:javascript
复制
class UsernameRole(UserBase):
    role:str

这样判断了登录并且呢也返回了用户的角色,那么我们对应的开发的个人信息的接口就可以进行开发。

代码语言:javascript
复制
@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)

这样我们就返回了登陆用户的信息。我们这次用到的知识点有FastAPI 学习之路(五十六)校验是否登陆FastAPI 学习之路(二十八)获取当前用户

后记

发现问题,解决问题。遇到问题,慢慢解决问题即可。

欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识

如果你有问题可以留言或者加我微信:952943386。

2021,一起牛转钱坤,一起牛逼。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档