源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统"
之前我们分享了FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发。这次我们去分享实战开发《在线课程学习系统》接口开发--修改密码
我们梳理一下接口的逻辑:
1.需要用户登录,根据登录的用户,去校验密码
2.校验成功,我们判断新密码是否符合要求
3.存储新的密码
4.删除对应的用户token以及错误密码存储的数据
那么开始代码实现,对应的修改密码的参数模型
class UserChangePassword(BaseModel):"""修改密码"""password: strnew_password: str
在user_method.py中实现修改密码的具体逻辑:
async def change_password_method(request: Request, param_password: UserChangePassword, _user: UsernameRole, db: Session):"""修改密码"""logger.info(f"用户:{_user.username} 修改密码开始了")if param_password.password == param_password.new_password:return response(code=100304, message="新旧密码不能一样")if len(param_password.new_password) < 8 or len(param_password.new_password) > 16:return response(code=100303, message="新密码长度不匹配")db_user = get_by_username(db, _user.username)verify = verify_password(param_password.password, db_user.password)if verify:new_password_hash = get_password_hash(param_password.new_password)db_user.password = new_password_hashtry:db.commit()db.refresh(db_user)except:logger.warning(f"method change_password_method error: {format_exc()}")return response(code=100302, message="修改密码失败")await request.app.state.redis.delete(_user.username)await request.app.state.redis.delete(_user.username + "_password")logger.info(f"用户:{_user.username} 修改密码成功")return response()return response(code=100301, message="原始密码未校验通过")
接下来实现接口:user.py
@user_router.post("/password", summary="修改密码")
async def change_password(request: Request,param_password: UserChangePassword,_user: UsernameRole = Depends(get_current_user),db: Session = Depends(create_db)
):return await change_password_method(request, param_password, _user, db)
测试:
至此,修改密码接口完成