如何复制 returns 随机值的函数值?
how do i copy the value of a function that returns random values?
我正在尝试将密码转换为散列密码,同时保留原始密码。
看来我尝试的两个版本 return 不一样(即使是深拷贝,我删除了。)
def publish_rando(pub_id):
rand_user = rando() #just a random string generator function
rand_pass = rando() #just a random string generator function
hashed_pass = _hash.bcrypt.hash(rand_pass) #hashed version of the random pass
pub_pass = _models.pubUser(pub_id = pub_id, rand_user = rand_user, rand_pass = rand_pass)
pub_hash = _models.pubUser(pub_id = pub_id, rand_user = rand_user, rand_pass = hashed_pass)
return {'pub_hash': pub_hash, 'pub_pass': pub_pass}
我得到了什么:
{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7f20e21486a0>, 'pub_id': '57', 'rand_user': '5uJm#<B>WYu?', 'rand_pass': 'b$tHRolNUYQZ6XJm27UZaXTO7SKmJKAbHaqH97DbKQxvMrw79pAK9t.'}
{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7f20e2148490>, 'pub_id': '57', 'rand_user': 'J*gne5Nm#B<2', 'rand_pass': 'sjM%OvAtHg>8'}
注意用户不同,这告诉我密码也不一样。
_models.pubUser 是一个 sqlalchemy 模型:
class pubUser(Base):
__table__ = Table('pub_user', metadata,
autoload=True, autoload_with=engine)
来电:
pub_rand_hashed = _crud.publish_rando(d['pub_id']).get('pub_hash') #this creates another sqlalchemy row object
pub_rand_unhashed = _crud.publish_rando(d['pub_id']).get('pub_pass') #this creates another sqlalchemy row object
print(pub_rand_hashed.__dict__, pub_rand_unhashed.__dict__)
好吧,这完全是新手犯的错误,但也许它会对某人有所帮助。
@Barmar 敏锐地指出,如果您不调用该函数两次,则不可能有不同的答案。
嗯,我改变了这个:
pub_rand_hashed = _crud.publish_rando(d['pub_id']).get('pub_hash') #this creates another sqlalchemy row object
pub_rand_unhashed = _crud.publish_rando(d['pub_id']).get('pub_pass') #this creates another sqlalchemy row object
对此:
pub_rand = _crud.publish_rando(d['pub_id']) #this creates another sqlalchemy row object
pub_rand_unhashed = pub_rand.get('pub_pass')
pub_rand_hashed = pub_rand.get('pub_hash')
我正在尝试将密码转换为散列密码,同时保留原始密码。
看来我尝试的两个版本 return 不一样(即使是深拷贝,我删除了。)
def publish_rando(pub_id):
rand_user = rando() #just a random string generator function
rand_pass = rando() #just a random string generator function
hashed_pass = _hash.bcrypt.hash(rand_pass) #hashed version of the random pass
pub_pass = _models.pubUser(pub_id = pub_id, rand_user = rand_user, rand_pass = rand_pass)
pub_hash = _models.pubUser(pub_id = pub_id, rand_user = rand_user, rand_pass = hashed_pass)
return {'pub_hash': pub_hash, 'pub_pass': pub_pass}
我得到了什么:
{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7f20e21486a0>, 'pub_id': '57', 'rand_user': '5uJm#<B>WYu?', 'rand_pass': 'b$tHRolNUYQZ6XJm27UZaXTO7SKmJKAbHaqH97DbKQxvMrw79pAK9t.'}
{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7f20e2148490>, 'pub_id': '57', 'rand_user': 'J*gne5Nm#B<2', 'rand_pass': 'sjM%OvAtHg>8'}
注意用户不同,这告诉我密码也不一样。
_models.pubUser 是一个 sqlalchemy 模型:
class pubUser(Base):
__table__ = Table('pub_user', metadata,
autoload=True, autoload_with=engine)
来电:
pub_rand_hashed = _crud.publish_rando(d['pub_id']).get('pub_hash') #this creates another sqlalchemy row object
pub_rand_unhashed = _crud.publish_rando(d['pub_id']).get('pub_pass') #this creates another sqlalchemy row object
print(pub_rand_hashed.__dict__, pub_rand_unhashed.__dict__)
好吧,这完全是新手犯的错误,但也许它会对某人有所帮助。
@Barmar 敏锐地指出,如果您不调用该函数两次,则不可能有不同的答案。
嗯,我改变了这个:
pub_rand_hashed = _crud.publish_rando(d['pub_id']).get('pub_hash') #this creates another sqlalchemy row object
pub_rand_unhashed = _crud.publish_rando(d['pub_id']).get('pub_pass') #this creates another sqlalchemy row object
对此:
pub_rand = _crud.publish_rando(d['pub_id']) #this creates another sqlalchemy row object
pub_rand_unhashed = pub_rand.get('pub_pass')
pub_rand_hashed = pub_rand.get('pub_hash')