Serializer # Поскольку строки трудно обрабатывать, этот модуль также # обеспечивает интерфейс сериализации, подобный json / pickle # и другим. (Внутри он использует simplejson по умолчанию, # однако это может быть изменено путем подклассификации.) Класс # Serializer реализует следующее: > from itsdangerous import Serializer > s = Serializer('secret-key') > s.dumps([1, 2, 3, 4]) # '[1, 2, 3, 4].r7R9RhGgDPvvWl3iNzLuIIfELmo' # метод dumps() генерирует цифровую подпись для данных, переданных # в аргументе и затем сериализует данные с подписью в строковый # маркер > s.loads('[1, 2, 3, 4].r7R9RhGgDPvvWl3iNzLuIIfELmo') # [1, 2, 3, 4] # метод loads() расшифровывает маркер. Функция проверяет сигнатуры # и срок хранения и если всё в порядке, возвращает исходные данные. # Когда метод loads() получает недопустимый маркер или определяет, # что срок хранения истёк, он возбуждает исключение. URLSafeSerialize > from itsdangerous import URLSafeSerializer > s = URLSafeSerializer('secret-key') > s.dumps([1, 2, 3, 4]) # 'WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo' > s.loads('WzEsMiwzLDRd.wSPHqC0gR7VUqivlSukJ0IeTDgo') # [1, 2, 3, 4] > s1 = URLSafeSerializer('secret-key', salt='activate-salt') > s1.dumps(42) # 'NDI.kubVFOOugP5PAIfEqLJbXQbfTxs' > s2 = URLSafeSerializer('secret-key', salt='upgrade-salt')
1)Signer类必须接收一个参数,作为秘钥,进行相关的初始化,例如:初始化 派生秘钥,盐值,哈希算法,具体可以查看源代码。 2)签名的时候默认先把 字符串 进行 utf8编码,然后计算签名。所以如果是中文,这里要注意了。 3)unsign 方法用来 验证 签名字符串是否是 合法的。如果验证通过,返回字符串本身(bytes类型)。 2. Serializer 类 Signer类 只能签名字符串,为了可以签名其他类型数据,Serializer 类提供了两个方法dumps/loads,类似json模块。 基本使用例子: from itsdangerous.serializer import Serializer s = Serializer("secret-key") ret = s.dumps([1, 2, 3, 4]) print(ret) # str类型:[1, 2, 3, 4].r7R9RhGgDPvvWl3iNzLuIIfELmo raw_list = s.loads('[1, 2, 3, 4].r7R9RhGgDPvvWl3iNzLuIIfELmo') print(raw_list) # list类型: [1, 2, 3, 4] 详解: 1) dumps 先把 列表 序列化成 字符串,然后进行签名。 2) loads 验证 签名,如果通过,返回 反序列数据。 3) 可以通过定义子类的方式,更改 序列化 使用的模块。(默认使用 json模块) 3. 如果想要你的签名 支持有效期, 请参考:https://itsdangerous.palletsprojects.com/en/1.1.x/timed/ 4. URLSafeSerializer 类 如果能够向只有字符受限的环境中传递可信的字符串的话,将十分有用。因此,itsdangerous也提供了一个URL安全序列化工具: 生成的签名和 JWS类似,只是少了 头部而已。