首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用户模型更改时,Flask admin会覆盖密码

Flask-Admin是一个用于快速创建管理界面的Flask扩展。当用户模型更改时,Flask-Admin不会直接覆盖密码,而是提供了一种安全的方式来处理密码的更新。

在Flask-Admin中,用户模型通常是通过继承flask_admin.contrib.sqla.ModelView类来创建的。当用户模型发生更改时,可以通过以下步骤来处理密码的更新:

  1. 创建一个自定义的用户模型视图类,继承自ModelView
  2. 在自定义的用户模型视图类中,重写on_model_change方法。
  3. on_model_change方法中,判断用户模型是否包含密码字段的更改。
  4. 如果密码字段发生更改,可以使用适当的密码哈希算法对新密码进行加密,并将加密后的密码存储到数据库中。

以下是一个示例代码,展示了如何在Flask-Admin中处理密码更新:

代码语言:txt
复制
from flask_admin.contrib.sqla import ModelView
from flask_bcrypt import generate_password_hash

class UserAdminView(ModelView):
    def on_model_change(self, form, model, is_created):
        # 检查密码字段是否发生更改
        if 'password' in form:
            # 使用适当的密码哈希算法对新密码进行加密
            hashed_password = generate_password_hash(form.password.data)
            # 将加密后的密码存储到数据库中
            model.password = hashed_password
        super(UserAdminView, self).on_model_change(form, model, is_created)

在上述示例中,UserAdminView是自定义的用户模型视图类,重写了on_model_change方法。在该方法中,我们检查了表单中是否存在密码字段,并使用flask_bcrypt库中的generate_password_hash函数对新密码进行加密。最后,将加密后的密码存储到数据库中。

这样,当用户模型更改时,Flask-Admin会通过自定义的用户模型视图类来处理密码的更新,确保密码的安全性。

关于Flask-Admin的更多信息和使用方法,您可以参考腾讯云的相关产品文档:Flask-Admin

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

flask_admin使用教程

使用 Flask-Security(Using Flask-Security) 如果你想要一个完美的解决方案,你可以使用 Flask-Security,这是一个更高级的库。...它带有许多内置视图,用于执行诸如用户注册、登录、电子邮件地址确认、密码重置等常见操作。 唯一复杂的一点是使内置的flask安全视图与flask管理模板顺利集成,以创建一致的用户体验。...Extending the Built-in Templates 与其完全覆盖内置模板,不如对其进行扩展。这将使您将来容易升级到新的flask管理版本。...请记住,模板将从一个版本的flask admin略微更改为下一个版本,因此一旦开始覆盖模板,在升级包版本时需要小心。...要覆盖任何内置模板,只需将它们从Flask-Admin 源复制到项目的templates/admin/目录中。只要文件名保持不变,项目目录中的模板就会自动优先于内置模板。

4.1K20

Python Web - Flask笔记7

一般我们修改数据库不会直接手动的去修改,而是去修改ORM对应的模型,然后再把模型映射到数据库中。这时候如果有一个工具能专门做这种事情,就显得非常有用了,而flask-migrate就是做这个事情的。...flask-migrate是基于Alembic进行的一个封装,并集成到Flask中,而所有的迁移操作其实都是Alembic做的,他能跟踪模型的变化,并将变化映射到数据库中。...EqualTo:验证上传的数据是否和另外一个字段相等,常用的就是密码和确认密码两个字段是否相等。 3. InputRequir:原始数据的需要验证。...原理是,客户端发送验证信息过来(比如用户名和密码),服务器验证成功后,把用户的相关信息存储到session中,然后随机生成一个唯一的session_id,再把这个session_id存储cookie中返回给浏览器...这样就可以达到安全识别用户的需求了。 cookie存储到客户端:原理是,客户端发送验证信息过来(比如用户名和密码)。

1K20

flask mysql 数据库增删改查(微信报修小程序源码讲解四)

上一讲,我们学习了 flask 拦截器与session的使用 ,已经清楚了后台用户是否登录的判断及验证 url 合法性的方法 。...,你的数据库用户名 PASSWORD = 'Wjie2018' # 密码 ,你的数据库密码 HOST = '127.0.0.1' # 服务器 ,数据库所在服务器的ip,本地即 127.0.0.1...[在这里插入图片描述] model 中为了映射数据库字段 ,首先要引入数据库 ,从之前我们创建好的exts中引入 db from exts import db 然后创建用户模型 # 用户模型 class...(可参照源代码的controllor/user/user.py中的代码) 增:向用户表添加一条数据 user = User(userName='admin', userPassword='123456...admin 为 study2100 db.session.commit() # 提交数据库 查:分页查询用户表数据 users = User.query.paginate(1, per_page

1.7K41

Flask构建微电影(二) 第三章、项目分析、搭建目录及模型设计

/home  后台(admin) 数据模型:models.py 表单处理:admin/forms.py 模板目录:templates/admin 静态文件:static 开始创建目录,如下: ?...:utf-8 __author__ = 'derek' from flask import Blueprint admin = Blueprint("admin",__name__) import...3.3.会员及会员登录日志数据模型设计  (1)安装flask-sqlalchemy pip install -i https://pypi.douban.com/simple --trusted-host...import pymysql app = Flask(__name__) #连接mysql数据库(用户名、密码、ip、端口和数据库名字) app.config["SQLALCHEMY_DATABASE_URI...__) #连接mysql数据库(用户名、密码、ip、端口和数据库名字) app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456

99200

我的python学习--第七、八天

下面的是最常见的方法:   get:常用与获取数据,读,浏览器访问都是get请求   post:写数据,浏览器默认是不支持直接post方式,一般通过变动设置 method="post"实现, 优点:表单数据以... [dict((k,res[i]) for i,k in enumerate(fields))]                # (2)*方便的写法 二、mysql多条数据查询 >>> import...把用户的所有信息都存为session的一条记录,可以在任何场景下使用get获取,在每个增删查改的操作前,通过查看session中是否有记录来判断用户是否已经登录,没有登录则跳转到登录页面 from flask...以登录模块为例 总结MVC思想 一:前端   1.登录页面首次登录默认get方式,返回一个待填写的表单   2.输入用户密码后,点击表单按钮以post方式向逻辑端发起请求,并把表单数据传给逻辑端 二:...如果不存在,则跳转到登录页面,重新输入账号密码 三:数据端   5.对数据库的增删改查,并返回结果

66020

2023春秋杯网络安全联赛春季赛

Phpstudy本来以为是XSS+CSRF反弹shell,但是一直弹不上,猜测是登陆界面sql注入放入X-Requested-With:XMLHttpRequest请求头就能进入登陆界面用户名sqk注入改密码...admin' ;UPDATE ADMINS set PASSWORD ='c26be8aaf53b15054896983b43eb6a65';--admin/123456计划任务执行cat /f*EasypyDir...扫目录,有个download路由,下载源码被删了,有个pyc反编译一下得到源码from flask import Flask, Response, requestapp = Flask(__name__...919c-a140d7054ac5使用AXIOM Process挂载一下:Flag1:f97d5b05-d312-46ac拼接一下flag{f97d5b05-d312-46ac-919c-a140d7054ac5}盲人藏在哪里加一下文件头得到密码...www.zip即可获得,将读取的zip下载到本地修改时间即可得到时间戳然后就是获取一个index.php.bin这个就需要本地搭建一个和题目一样的环境即php-8.2.2-apache的,用docker

70401

【Web开发】Flask框架基础知识

提供国际化和本地化支持,翻译; Flask-script:插入脚本; Flask-Login:认证用户状态; Flask-OpenID:认证; Flask-RESTful:开发REST API的工具;...Flask-Bootstrap:集成前端Twitter Bootstrap框架; Flask-Moment:本地化日期和时间; Flask-Admin:简单而可扩展的管理接口的框架 相关文档: 中文文档...flask-sqlalchemy安装 pip install flask-sqlalchemy pip install mysqlclient 直接安装mysqlclient可能安装失败,我去官网下了轮子...mysql://root:你的密码@127.0.0.1:3306/zstar,之后使用db.create_all()创建前面定义出的数据表,同理db.drop_all()删除前面定义出的数据表。...本例中,我定义了两个接口,第一个根目录接口,分别尝试了通过sql来从直接查询和调用对象进行查询的两种查询方式,第二个/create接口,实现了向数据表Role中插入一个名称为admin用户数据。

2K20

​第 07 篇:创作后台开启,请开始你的表演!

注意: 在命令行输入密码时可能不会显示输入的字符,不要以为键盘坏了,照正常的方式输入密码即可。...在 admin 后台注册模型 要在后台注册我们自己创建的几个模型,这样 django admin 才能知道它们的存在,注册非常简单,只需要在 blog\admin.py 中加入下面的代码: blog/admin.py...django admin 后台登录页面,输入刚才创建的管理员账户密码就可以登录到后台了。...接下来是填充创建时间,修改时间和文章作者的值。之前提到,文章作者应该自动设定为登录后台发布此文章的管理员用户。...答案是不能,因为虽然第一次保存数据时,根据默认值指定为当前时间,但是当模型数据第二次修改时,由于 modified_time 已经有值,即第一次的默认值,那么第二次保存时默认值就不会起作用了,如果我们不修改

1.1K20

测试 Flask 应用

为此,我们向登陆和登出页面发送一些请求,这些请求都携带了表单数据(用户名和密码),因为登陆和登出页面都会重定向,我们将客户端设置为 follow_redirects 。...------------------------------------------------------------ Ran 3 tests in 0.332s OK 关于请求的头信息和状态值等复杂的测试...在应用上下文或 flask.g 对象上存储用户认证信息和数据库连接非常常见。一般的模式是在第一次使用对象时,把对象放在应用上下文或 flask.g 上面,而在请求销毁时移除对象。...user = fetch_current_user_from_database() g.user = user return user 对于测试,这样易于从外部覆盖这个用户,而不用修改代码...有时,在测试客户端里访问和修改 Sesstions 可能非常有用。 通常有两种方法实现这种需求。

65800

小记 - Flask基础

type="submit" value="提交"> Flash消息闪现 有时候需要向模板动态传递一些消息,例如提示用户名不能为空、密码不一致等等...CSRF防护根据设置的密钥生成加密令牌 需要先安装此插件 pip install Flask-WTF 基本示例 先自定义一个表单类 继承自基类FlaskForm 导入所需的表单字段 from flask_wtf...db = SQLAlchemy(app) 创建一个数据库,打开命令行登录数据库后输入 create database flask_demo charset=utf8; 数据模型 定义数据模型 Roles...表 role_id(主键) 1 管理员 2 普通用户 Users表 user_id user_name role_id(外键) 1 1号管理 1 2 2号管理 1 3 用户A 2 实现数据模型...开始查询操作 # 查询全部用户 User.query.all() # 查询用户总数 User.query.count() # 查询第1个用户 User.query.first() # 查询id为4的用户

2.8K10
领券