我试图在Python中使用一个函数,似乎我遇到了类型错误。我正在使用Django,并通过get请求获取一个变量的值,并从Model查询中获取另外两个变量的值。由于某种原因,这三个都是unicode类型,而我需要它们作为此函数的字符串/字典。功能代码(为方便起见,省略了一些代码):
content = request.POST.get('status', False)
auth = Authority.objects.get(app_name=appname)
encrypted = encrypt(auth.p_key, content, auth.policy)
print type(auth.p_key), type(content), type(auth.policy)
print auth.p_key, content, auth.policy
现在,当我存储p_key
和policy
时,它们分别是一个字典和一个字符串。但是当我打印类型时,它会给我<type 'unicode'> <type 'unicode'> <type 'unicode'>
。然后,当运行encrypt
函数时,结果不正确并显示错误消息:
之间的类型不匹配
src='<type 'unicode'>' and targ='<type 'dict'>'
然后,当我打印实际值时,它们显示为
{'h': <pairing.Element object at 0x103273d20>, 'e_gg_alpha': <pairing.Element
object at0x1032a3810>, 'g2': <pairing.Element object at 0x103273a08>, 'g':
<pairing.Element object at 0x103273b28>, 'f': <pairing.Element object at
0x1032a3078>} adfadfadsf (a or b)
这似乎是一个字典和两个字符串,正是我正在寻找的。我尝试使用ast.literal_eval
将unicode转换为dict,正如许多地方所建议的那样,但我只是在ast.py文件中得到一个SyntaxError。
感谢您的帮助!
编辑:权限模型和加密功能代码:
class Authority(models.Model):
app_name = models.CharField(max_length=100)
attr_list = models.CharField(max_length=1000)
p_key = models.CharField(max_length=1000)
d_key = models.CharField(max_length=1000)
policy = models.CharField(max_length=1000)
def __unicode__(self):
return self.app_name
def encrypt(self, pk, M, object):
key = self.group.random(GT)
c1 = abenc.encrypt(pk, key, object)
cipher = AuthenticatedCryptoAbstraction(sha1(key))
c2 = cipher.encrypt(M)
return { 'c1':c1, 'c2':c2 }