'bytes' object has no attribute 'encode'
在将每个文档插入到集合之前,我尝试存储salt和哈希密码。但在编码salt和密码时,会显示以下错误:
1 2 3 4 | line 26, in before_insert document['salt'] = bcrypt.gensalt().encode('utf-8') AttributeError: 'bytes' object has no attribute 'encode' |
这是我的代码:
1 2 3 4 5 | def before_insert(documents): for document in documents: document['salt'] = bcrypt.gensalt().encode('utf-8') password = document['password'].encode('utf-8') document['password'] = bcrypt.hashpw(password, document['salt']) |
我正在使用virtualenv中的eve框架和python 3.4
你用的是:
1 | bcrypt.gensalt() |
。此方法似乎生成了一个bytes对象。这些对象没有任何编码方法,因为它们只处理与ASCII兼容的数据。所以你可以尝试不使用.encode("utf-8")。
python 3文档中的字节描述
来自
与此相反,bcrypt模块方法中的"password"参数应该以unicode字符串的形式出现——在python 3中,它只是一个字符串。
所以-假设您的原始
1 2 3 4 5 | def before_insert(documents): for document in documents: document['salt'] = bcrypt.gensalt() password = document['password'] document['password'] = bcrypt.hashpw(password, document['salt']) |