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

news2024/11/15 19:23:36

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

测试:

至此,修改密码接口完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux操作系统】:进程间通信

目录 进程间通信介绍 1、进程间通信的概念 2、进程间通信的目的 3、进程间通信的本质 4、进程间通信的分类 管道 匿名管道 匿名管道的原理 pipe函数 创建匿名管道 管道的四种情况和五种特性 命名管道 使用命令创建命名管道 创建一个命名管道 命名管道的打开规则 …

Lc60---1189. “气球” 的最大数量(排序)---Java版

1.题目 2.思路 (1)用字典的方法,ballon,这个单词里面每个字母&#xff0c;需要的个数 (2)再创一个字典的方法统计&#xff0c;输入的字符串的字母的个数 (3)计算能拼凑出多少个“ballon" (4)代码解释 for (char c : text.toCharArray()) {count.put(c, count.getOrDefau…

【C++ —— AVL树】

C —— AVL树 AVL树的概念AVL树节点的定义AVL树的插入向上调整旋转左单旋右单旋左右双旋右左双旋 AVL树的高度AVL树的验证总结&#xff1a;代码 AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素…

在QT中使用多线程并发服务器(C++)

什么是多线程并发服务器&#xff1f;在QT里如何使用多线程并发服务器呢&#xff1f; 多线程并发服务器是一种网络服务器设计&#xff0c;它能够同时处理多个客户端的请求。在多线程服务器中&#xff0c;主线程负责监听和接受来自客户端的连接请求&#xff0c;每当有一个新的连…

DNS服务器的搭建

1、DNS服务器端软件 DNS 的域名解析都是 udp/53 . 主从之间的数据传输默认使 ⽤tcp/53 DNS服务器端软件&#xff1a; Bind是⼀款开放源码的DNS服务器软件&#xff0c;Bind由美国加州⼤学Berkeley&#xff08;伯克 利&#xff09;分校开发和维护的&#xff0c;全名为Berkele…

美容院如何提高门店销售业绩?博弈美业收银系统分享五大策略

美容院要如何增加门店业绩&#xff1f;各位老板可以考虑以下几个方面的策略&#xff1a; 一、品牌宣传和营销&#xff1a; • 制定全面的营销计划&#xff0c;包括线上和线下宣传。可以利用社交媒体、网站、本地广告等多种渠道提升品牌知名度。 • 开展促销活动吸引新客户&a…

PYTHON学习笔记(七、python数据结构--集合)

目录 &#xff08;4&#xff09;set集合 1、集合的创建方式 1&#xff09;使用{ }直接创建集合 2&#xff09;使用内置函数set( )创建集合 3&#xff09;使用“ 集合生成式 ”生成集合 2、集合的访问方式 1&#xff09;使用for循环遍历 3、集合的修改操作 4、集合的…

SvelteKit - 1. 初始化项目

官方 doc - create a project 1、基本环境 &#xff08;下面是我这里的环境&#xff0c;亲测用 node 14 和 16 install 会报错&#xff09; node&#xff1a;20.9.0 npm&#xff1a;10.1.0 2、初始化项目 npm create sveltelatest my-app cd my-app npm install npm run de…

本地部署、微调大模型

本地部署、微调大模型 一、本地部署大模型 1.部署 更新git-lfs apt-get updateapt-get install git-lfs2. 这里极容易出错&#xff0c;如果报错就初始化git git lfs install git init git lfs install3.下载ChatGLM-6B源代码 git clone https://github.com/THUDM/ChatGLM…

华为强制恢复出厂设置后如何恢复数据?数据重生的2个方法介绍

华为作为全球知名的手机品牌&#xff0c;其产品在市场上广受欢迎。然而&#xff0c;有时由于各种原因&#xff0c;我们可能需要强制恢复出厂设置&#xff0c;这往往意味着数据的丢失。那么&#xff0c;如何在华为强制恢复出厂设置后&#xff0c;让数据“重生”呢&#xff1f;本…

赋能安防摄像头云台:国产大功率机壳开关旭之源电源可靠、高效的优势

由GIS地图、图像采集、传输、控制、显示等设备和控制软件组成的“天网系统”通过对固定区域进行实时监控和信息记录&#xff0c;为社会治安和城市管理提供了强有力的支撑。 随着技术的不断革新和升级&#xff0c;天网技术逐渐拓展到全国范围&#xff0c;并在各个城市和乡村实现…

兼容浏览器,切换PC端显示PC端,切换H5端显示H5端

兼容浏览器&#xff0c;切换PC端显示PC端&#xff0c;切换H5端显示H5端 Uniapp vue3 Uview 项目 Vue3 Vite Ts ElementPlus PC端 &#xff08;在浏览器PC端&#xff0c;切换H5端兼容显示H5端页面&#xff09; 浏览器H5端 (在浏览器H5端&#xff0c;切换PC端兼容显示PC端…

【React】通过实际示例详解评论列表渲染和删除

文章目录 一、引言二、初始状态与状态更新1. 使用useState钩子管理状态2. 评论列表的初始数据 三、列表渲染的实现1. list.map(item > { ... })2. return 语句3. JSX 语法4. 为什么这样设计5. 完整解读 四、列表项的唯一标识1. key 的作用2. key 的用法3. 可以没有 key 吗&a…

SpringBoot整合Kaptcha实现图片验证码加减乘除

目录 SpringBoot整合Kaptcha实现图片验证码加减乘除1. 添加Kaptcha依赖2. 自定义文本生成器3. 配置Kaptcha4. 获取验证码图片的方法4.1. 详细讲解控制器中的切割操作 5. 总结 SpringBoot整合Kaptcha实现图片验证码加减乘除 在开发Web应用时&#xff0c;验证码是一个常见的功能…

Dhtmlx Gantt教程:创建交互式甘特图的完整指南

在现代的项目管理中&#xff0c;时间是一种宝贵的资源&#xff0c;而甘特图则是一把解锁项目进度的魔法钥匙&#xff0c;想象一下&#xff0c;您可以在一个直观而动态的时间轴上&#xff0c;清晰地看到项目的每一个任务如何交织在一起&#xff0c;如何随着时间的推移展开&#…

temu卖家中心入口登入在哪里,跨境电商temu卖家中心入口登入

在跨境电商的浪潮中&#xff0c;拼多多推出的Temu平台以其独特的商业模式和优惠政策&#xff0c;吸引了众多卖家的目光。对于想要入驻Temu平台的商家而言&#xff0c;找到正确的卖家中心入口并成功登录&#xff0c;是开启跨境电商之旅的第一步。那么&#xff0c;Temu卖家中心入…

QGC二次开发入门教程(一):课程大纲

文章目录 前言一、课程大纲二、修改软件名称三、修改软件图标四、官方QGC中文版BUG修复五、汉化六、修改商标七、添加信号-槽1、添加文件到QGC工程2、添加界面3、QML和C交互4、信号与槽5、测试 八、添加QML和C交互九、MAVLINK的解析与发送十、换地图十一、添加自定义mavlink消息…

3. 手势识别(LeNet、Vgg16、ResNet50)

手势识别 Show me your code1. 模型 model.py2. LeNet 实现手势识别&#xff08;详细&#xff09;2.1 数据打包2.2 搭建模型2.3 训练模型2.4 结果分析2.5 推理过程 3. Vgg16 手势识别4. ResNet50 手势识别 Show me your code 1. 模型 model.py import torch from torch impor…

基于单片机的智能台灯设计

摘 要 &#xff1a; 随着电子产品智能化的发展 &#xff0c; 生活中人们使用的照明工具也逐渐智能化 &#xff0c; 功能也越来越丰富 。 本文介绍了使用单片机进行可调光台灯系统的设计。 通过控制单片机输出高低电平的持续时间 &#xff0c; 从而改变 PWM 的占空比 &#…

el-tree树添加向下移动按钮,前端界面调整顺序

需求&#xff1a;树上添加向下按钮&#xff0c;再不调用接口的情况下&#xff0c;调整树的顺序结构 遇到的问题&#xff1a;第一次点击更新的&#xff0c;数据和视图是调整好的&#xff0c;再次点击页面调整顺序&#xff0c;只有数据被调整了&#xff0c;视图没有发生改变。 &…