将unicode数据转换回dicts / strings

时间:2014-03-17 01:28:05

标签: python django dictionary unicode

我试图在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_keypolicy时,它们分别是一个字典和一个字符串。但是当我打印类型时,它会给我<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 }

0 个答案:

没有答案