예제 #1
0
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')
예제 #2
0
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类似,只是少了 头部而已。