在之前的文章:FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发,今天实战:用户 个人信息接口开发。
在开发个人信息接口的时候,我们要注意了,因为我们不一样的用户个人信息不一样,而且需要依赖登录,那么我们需要根据用户是否登录来返回用户信息,根据用户的角色来返回对应的信息,
def get_role_name(db:Session,id:id): return db.query(Role).filter(Role.id == id).first()
校验下登录。因为我们的token在生成的时候,我们存储了用户的信息,那么我们现在看下如何根据token获取用户的信息
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对象。
class UsernameRole(UserBase): role:str
这样判断了登录并且呢也返回了用户的角色,那么我们对应的开发的个人信息的接口就可以进行开发。
@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)
这样我们就返回了登陆用户的信息