0

我需要一些帮助来解决这个错误,我在我的 store_user_db.py 文件中创建了一个 User 类,它基本上使用 Fernet 加密库将加密密码存储在数据库中。存储密码后,我需要一个解密密码的函数,因此我在 User 类中创建了一个 def decrypt_pwd 函数,如下所示,问题是当我在导入 store_user_db 后尝试从 py 其他 form.py 文件中调用此函数时使用 User 类,它返回错误:'module' object has no attribute 'decrypt_pwd'

我错过了什么吗?如果可以,请以正确的方式编辑我的代码。

#store_user_db.py
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///data-users2.sqlite"
db = SQLAlchemy(app)


class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer(), primary_key=True, autoincrement=True)
    username = db.Column(db.String(64), unique=True)
    pwd = db.Column(db.LargeBinary(), unique=True)

    def __init__(self, id, username, pwd):
        key = Fernet.generate_key()
        f = Fernet(key)
        token = f.encrypt(pwd)
        self.id = id
        self.username = username
        self.pwd = f.encrypt(pwd)

        def decrypt_pwd(self):
            p = db.session.query(User).filter_by(username="ita_itf").first()
            DESTINATION_PSW = f.decrypt(p.pwd)
            return DESTINATION_PSW

这里我调用函数:

        #form.py
        from store_user_db import User, db 
        import store_user_db
        
        DICP_FTP_DESTINATION_PSW = store_user_db.decrypt_pwd()

错误:

AttributeError: 'module' object has no attribute 'decrypt_pwd'
4

1 回答 1

0

试试这个代码:

#store_user_db.py
class User(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer(), primary_key=True, autoincrement=True)
    username = db.Column(db.String(64), unique=True)
    pwd = db.Column(db.LargeBinary(), unique=True)

    def __init__(self, username, pwd):
        self.username = username
        self.pwd = f.encrypt(pwd)

    
def decrypt_pwd():
    key = Fernet.generate_key()
    f = Fernet(key)
    token = f.encrypt(pwd)
    p = db.session.query(User).filter_by(username="ita_itf").first()
                DESTINATION_PSW = f.decrypt(p.pwd)
                return DESTINATION_PSW

#form.py
from store_user_db import decrypt_pwd
DICP_FTP_DESTINATION_PSW = decrypt_pwd()
于 2020-09-16T05:49:54.237 回答