如何使用变量用法而不是实际名称访问GAE数据存储区属性?

时间:2012-06-24 16:49:45

标签: python google-app-engine google-cloud-datastore

我有很多行,比如

if last_name:
    person.last_name = hashlib.sha512(last_name + salt).hexdigest()
if first_name:
    person.first_name = hashlib.sha512(first_name + salt).hexdigest()

我想编写一个简化代码的函数。但是我如何使用person.<variablename>?

2 个答案:

答案 0 :(得分:2)

def set_hash(entity, name, value):
  if value:
    setattr(entity, name, hashlib.sha512(value + salt).hexdigest())


set_hash(person, "last_name", last_name)
set_hash(person, "first_name", first_name)

答案 1 :(得分:0)

如果您要像Shay的示例那样单独枚举属性,那么更易读的解决方案就是将代码抽象为函数:

def poorly_salted_hash(value, salt):
  return hashlib.sha512(value + salt).hexdigest()

person.first_name = poorly_salted_hash(first_name, salt)
person.last_name = poorly_salted_hash(last_name, salt)

如果你想知道我为什么要调用函数“糟糕的哈希”,那是因为这不是散列哈希值的好方法:你应该使用类似HMAC的构造,它由Python提供{ {1}}库。尽管如此,至少可以说是某个人的名字和姓氏,这是相当奇怪的,所以我不知道你的安全目标是什么。