【问题标题】:Python Type Error: 'module' object is not callable [duplicate]Python类型错误:“模块”对象不可调用[重复]
【发布时间】:2020-12-31 13:10:57
【问题描述】:

我遇到了错误“模块”对象不可调用的问题。 我正在使用这个 pyAesCrypt 库来加密/解密密码。

这里我定义了一个类 User 来存储在数据库中加密的密码,运行应用程序。 然后我需要从数据库中查询加密密码并解密,将其传递给变量。 所以这是我定义的类:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
#from flask_bcrypt import Bcrypt
import pyAesCrypt

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):
        p = pyAesCrypt(encoding=False)
        self.id = id
        self.username = username
        self.pwd = p.encrypt("password",pwd)

这里我从db查询密码并解密,但是我调用模块pyAesCrypt的地方似乎有问题,错误如下。任何人都可以看到任何异常?如果是,您能否以正确的方式编辑我的代码?谢谢。

import pyAesCrypt
        
#get FTP pwd
user = db.session.query(User).filter_by(username="ita_itf").first()
p_decrypt = pyAesCrypt(encoding=False)
DICP_FTP_DESTINATION_PSW = p_decrypt.decrypt("password",user.pwd)
        

错误:

p_decrypt = pyAesCrypt(encoding=False)
TypeError: 'module' object is not callable

【问题讨论】:

  • 可能pyAesCrypt在模块内有同名函数,有点像datetime.datetime()。所以可能有点像这样:from pyAesCrypt import pyAesCrypt

标签: python python-3.x python-2.7 flask flask-sqlalchemy


【解决方案1】:

你所做的是p_decrypt = pyAesCrypt(encoding=False)

pyAescrypt 是模块名称,你仍然需要告诉模块你想要它做什么,比如 encryptdecrypt

你应该做的就是smthg like

p_decrypt = pyAesCrypt.decryptStream("password",user.pwd)

否则,完整的AesCrypt Documentation

【讨论】:

  • 好的,谢谢,这个例子只适用于文件,我需要解密密码
  • 我发现这个文档似乎是解密密码的正确文档github.com/ninjatrench/PyAESCrypt
  • 也在函数decryptStream()中你需要传递4个参数:fIn、fOut、password、bufferSize,不确定fln、fOut是什么,我认为这是用于文件加密,而不是用于密码字符串
【解决方案2】:

因此,查看文档,您似乎错过了对必要函数的调用。在这种情况下,我认为您想要的是 pyAesCrypt.decryptStream() 方法。详情请查看文档here (under the binary stream section)

【讨论】:

  • 非常感谢!我不太清楚我应该在 fIn、fOut 中传递什么,那是什么?我只需要传递一个密码,> pyAesCrypt.encryptStream(fIn, fOut, password, bufferSize)
  • pyAesCrypt.decryptStream() ,你需要传递4个参数,我不知道我应该传递什么其他参数,我只有一个密码来解密
  • 这似乎是正确的方式github.com/ninjatrench/PyAESCrypt
  • 但返回该错误
  • @MarcelloLigi 您提到的那个包与 PyPi 包完全不同。所以如果你做了pip install pyAesCrypt 那个方法是行不通的。对于该版本,您需要使用from PyAesCrypt import PyAesCrypt 才能正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
相关资源
最近更新 更多