Python 'bytes' 对象没有属性 'encode'
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/38246412/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
'bytes' object has no attribute 'encode'
提问by DEVV911
I'm trying to store salt and hashed password before inserting each document into a collection. But on encoding the salt and password, it shows the following error:
我试图在将每个文档插入集合之前存储盐和散列密码。但是在对盐和密码进行编码时,它显示以下错误:
line 26, in before_insert
document['salt'] = bcrypt.gensalt().encode('utf-8')
AttributeError: 'bytes' object has no attribute 'encode'
This is my code:
这是我的代码:
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'])
I'm using eve framework in virtualenv with python 3.4
我在 virtualenv 中使用 eve 框架和 python 3.4
回答by Kreu
You're using :
您正在使用:
bcrypt.gensalt()这个方法似乎生成了一个字节对象。这些对象没有任何编码方法,因为它们只适用于 ASCII 兼容数据。所以你可以尝试不.encode('utf-8').encode('utf-8')
回答by MarianD
The saltfrom the .getsalt()
method is a bytes object, and all the "salt" parameters in the methods of bcrypt module expect it in this particular form. There is no need to convert it to something else.
该盐从.getsalt()
方法是一个字节对象,并且在bcrypt模块的方法的所有的“盐”参数期望它在这一特定形式。无需将其转换为其他内容。
In contrast to it, the "password" parameters in methods of bcrypt module are expected it in the form of the Unicode string- in Python 3 it is simply a string.
与此相反, bcrypt 模块方法中的“密码”参数需要以Unicode 字符串的形式出现- 在 Python 3 中它只是一个string。
So - assuming that your original document['password']
is a string, your code should be
所以 - 假设你的原件document['password']
是一个字符串,你的代码应该是
def before_insert(documents):
for document in documents:
document['salt'] = bcrypt.gensalt()
password = document['password']
document['password'] = bcrypt.hashpw(password, document['salt'])