FastAPI(六十八)實戰開發《在線課程學習系統》接口開發--用戶 個人信息接口開發


在之前的文章: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)

  這樣我們就返回了登陸用戶的信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM