今天看《Flask Web开发》一书,在看到第8章,P91页时,方法 generate_confirmation_token(self, expiration=3600)
报错,错误内容为 unsupported operand type(s) for +: 'int' and 'str'
。经调试,发现问题出在 itsdangerous
库中的方法 def want_bytes(s, encoding='utf-8', errors='strict')
(代码详见文末)没有正确的把s——即前面的 expiration
——转换为字符串,导致接下来在 class Signer(object):
中def derive_key(self):
方法里,return self.digest_method(salt + b'signer' + self.secret_key).digest()
处会报错。
考虑将 expiration=3600
改为字符串的 '3600'
但是根据书上的说法,这里表示有效期为 3600秒。所以这里应该怎么修改,尚未解决。
def want_bytes(s, encoding='utf-8', errors='strict'):
if isinstance(s, text_type):
s = s.encode(encoding, errors)
return s