FastAPI(六十九)实战开发《在线课程学习系统》接口开发--修改密码

源码见:"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)

测试:

至此,修改密码接口完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值