FastAPI(六十九)实战开发《在线课程学习系统》接口开发--修改密码
之前我们分享了FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发。这次我们去分享实战开发《在线课程学习系统》接口开发--修改密码
我们梳理一下这里的逻辑
1.需要校验登录用户,根据登录用户,我们去校验密码 2.校验成功,我们判断新密码是否符合要求 3.存储新的密码 4.删除对应的用户的token以及错误密码存储的数据
那么开始代码实现,对应的修改密码的pydantic。
from pydantic import BaseModel class UserChangepassword(BaseModel): password:str newpassword:str
crud我们使用之前的即可。本片不用新增,我们就可以按照逻辑,去实现我们的代码。
@usersRouter.get(path='/changepassword') async def changepassword(request: Request,userchangepasword:UserChangepassword, user:UsernameRole= Depends(get_cure_user), db: Session = Depends(get_db)): if userchangepasword.password==userchangepasword.newpassword: return reponse(code=100304,message='新旧密码不能一样',data='') if len(userchangepasword.newpassword)<8 or len(userchangepasword.newpassword)>16: return reponse(code=100303,message='新密码长度不匹配',data='') username=user.username user_name=get_user_username(db,username) verify=verify_password(userchangepasword.password,user_name.password) if verify: hashpassword=get_password_hash(userchangepasword.newpassword) user_name.update({'password':hashpassword}) try: db.commit() db.refresh(user_name) except Exception as e: logger.exception(e) return reponse(code=100302,message='密码保存失败',data='') request.app.state.redis.delete(user.username) request.app.state.redis.delete(user.username+"_password") return reponse(code=200,message="成功",data=user.username) return reponse(code=100301,message='原密码校验失败',data='')
这里的实现很多,用到了redis的相关知识。可以看之前redis操作的分享。所有的接口调试,我们放在后面的测试阶段