1.作用:
可以利用itsdangerous模块支持JSON WEB签名。
2.安装
如项目使用到虚拟环境,终端先【workon 虚拟环境名称
】再安装
pip install itsdangerous
1
3.使用itsdangerous模块
(1)使用TimedJSONWebSignatureSerializer生成带有有效期的token—加密
from itsdangerous import TimedJSONWebSignatureSerializer as TJWSSerializer
from itsdangerous import BadData
secret_key= 'afesjyrtrw6457t'
expires_in = 300 # 有效期单位为秒
def generate_token()
"""
# 生成token
"""
# serializer = TJWSSerializer(秘钥, 有效期单位为秒)
serializer = TJWSSerializer(SECRET_KEY, expires_in )
# serializer.dumps(数据), 返回bytes类型,比如对用户的id和email进行加密返回前端
data = {
'id': user.id,
'email':user.email
}
token = serializer.dumps(data) # data为要加密的数据
token = token.decode() # 得到返回后的带有效期和用户信息的加密token
return token
##############################################################################
(2)使用TimedJSONWebSignatureSerializer校验带有有效期的token,下列User是django ORM数据库中的用户模型类,其他框架用法类似均为根据数据查询指定用户是否存在----解密
from itsdangerous import TimedJSONWebSignatureSerializer as TJWSSerializer
from itsdangerous import BadData
# 检验token(secret和有效期(expires_in)需要与生成时一致)
def check_token(token):
# 验证失败,会抛出itsdangerous.BadData异常
serializer = TJWSSerializer(secret_key, expires_in )
try:
# 获取解密后的数据 bytes:dict
data = serializer.loads(token)
except BadData:
return None
else:
user_id = data.get('id')
user_email = data.get('email')
try:
user = User.objects.get(id=user_id,email=user_email)
except User.DoesNotExist:
return None
else:
return user
4.使用场景:
例如:注册一个网站用户,当用户绑定邮箱保存之后,服务器会给邮箱发送一封验证邮件,用户打开邮件里的url链接,就可以向服务器发送验证请求。服务器验证用户成功则将用户表的邮箱验证标志改为True,完成邮箱验证。
第一步:用户点击保存邮箱以后,或者点击验证按钮,服务器收到请求,将用户的登陆的信息组织数据,加密到token,并把token拼接到邮箱验证的ur链接里,并调用异步发送邮件任务向用户填写的邮箱发送邮件。
第二步:用户打开邮件,点击验证的链接,即向服务器发送验证请求,服务器从url里取出查询参数token,并经过itsdangerous模块进行反解析获取到用户身份并进行验证。
---------------------
作者:Keepself
来源:CSDN
推荐了解热门学科
传智播客是一家致力于培养高素质软件开发人才的科技公司,“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。
传智播客从未停止思考
传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”
中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。
何为中高级程序员课程?
传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展。“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。
黑马程序员热门视频教程【点击播放】