在烧瓶中生成密码哈希时出错

  • 本文关键字:密码 哈希时 出错 flask
  • 更新时间 :
  • 英文 :


我正在烧瓶中构建一个web-application,我添加到其中的模块之一是用户模块,它包含来自用户的信息,包括ID、电子邮件、密码和角色。对于密码,我试图生成一个密码哈希,但在我的烧瓶外壳中,我无法将密码添加到数据库中(但我可以添加电子邮件,如果我不生成密码哈希,我也可以添加密码(。对于用户模块,我制作了一个蓝图和一个单独的文件夹,其中包括models.py__init__.py

这是app.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Development
app = Flask(__name__)
app.config.from_object(Development)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
@app.route('/')
def index():
return "Home page"

from mod_users import users
app.register_blueprint(users)

对于用户模块(文件夹(,这里是__init__.py文件:

from flask import Blueprint
users = Blueprint('users', __name__, url_prefix='/users/')
from .models import User

@users.route('/')
def user_index():
return "Hello from User index"

这是models.py:

from werkzeug.security import generate_password_hash
from sqlalchemy import Column, Integer, String
from app import db

class User(db.Model):
__tablename__ = 'users'
ID = Column(Integer(), primary_key=True)
email = Column(String(128), nullable=False , unique=True)
password = Column(String(128), nullable=False, unique=False)
role = Column(Integer(), nullable=False, default=0)

def set_password(self, password):
self.password = generate_password_hash(password)

在我的烧瓶外壳中:

from mod_users.models import User
from app import db
user = User()
user.email = ‘myemail@hgku.er’
user.set_password('123456')

最后一行我会得到这个错误:

Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'User' object has no attribute 'set_password'

但如果我这样做:

user.password = ‘123456’

它有效,我可以将它添加到数据库中。你知道我怎样才能纠正这个错误吗?

User对象中的缩进显然是错误的。如果希望set_password是一个类函数,则必须将其缩进到User类作用域中

class User(db.Model):
__tablename__ = 'users'
ID = Column(Integer(), primary_key=True)
email = Column(String(128), nullable=False , unique=True)
password = Column(String(128), nullable=False, unique=False)
role = Column(Integer(), nullable=False, default=0)

def set_password(self, password):
self.password = generate_password_hash(password)

最新更新