源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统"
之前我们分享了FastAPI(六十八)实战开发《在线课程学习系统》接口开发--用户 个人信息接口开发。这次我们去分享实战开发《在线课程学习系统》接口开发--修改密码
我们梳理一下接口的逻辑:
1.需要用户登录,根据登录的用户,去校验密码
2.校验成功,我们判断新密码是否符合要求
3.存储新的密码
4.删除对应的用户token以及错误密码存储的数据
那么开始代码实现,对应的修改密码的参数模型
class UserChangePassword(BaseModel):
"""修改密码"""
password: str
new_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_hash
try:
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)
测试:
至此,修改密码接口完成