我正在尝试使用SQLAlchemy和flask更新用户密码,但更改未被提交
change_admin_password = Blueprint('change_admin_password', __name__)
@change_admin_password.route('/api/users/password', methods = ['POST'])
@auth.login_required
def show():
username = request.json.get('username')
new_password = request.json.get('new_password')
if username is None or new_password is None:
abort(400)
if username != app.config['ADMIN_USER']:
abort(400)
admin = User.query.filter_by(username=username).first()
admin.hash_password(new_password)
db.session.commit()
return (jsonify({'success': True, 'message': 'Admin password changed'}), 201)
在User类中我有
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(32), index=True)
password_hash = db.Column(db.String(64))
roles = db.Column(db.String(128))
is_active = db.Column(db.Boolean, default=True)
created_at = db.Column(db.DateTime, nullable=False, server_default=func.now())
updated_at = db.Column(db.DateTime, nullable=False, server_default=func.now(), onupdate=func.now())
def hash_password(self, password):
self.password_hash = pwd_context.encrypt(password)
def verify_password(self, password):
return pwd_context.verify(password, self.password_hash)
def __repr__(self):
return '<User %r>' % self.username
更新: 如果我在提交之前尝试添加新用户,则新用户将添加到表中,但管理员仍具有旧密码
admin = User.query.filter_by(username=username).first()
admin.hash_password(new_password)
user = User(username='admintest')
user.hash_password(new_password)
db.session.add(user)
db.session.commit()
答案 0 :(得分:0)
我从run.py中删除了db的初始化,并从我所有模型中的一个地方导入了db。
所以在sqlalchemy_declaration我有
db = SQLAlchemy()
和其他模型
from sqlalchemy_declarative import db
然后我用
初始化应用程序 db.init_app(app)