https://juejin.im/entry/56b30250df0eea0054375e1d

安装

pip install itsdangerous

使用

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer # 导入itsdangerous里面的类 实现加密
from django.conf import settings # 创建序列化对象
# Serializer(私钥, 生命周期(秒))
# serializer = Serializer('secretkey', 3600) # 私钥不能公开,不然就能被篡改 可以借助django里setting.py配置文件中的SECRET_KEY
serializer = Serializer(settings.SECRET_KEY, 3600)
info = {'confirm':1}
# 通过序列化器dumps方法进行加密
data = serializer.dumps(info) # dumps里传的是键值对 是二进制
# 编码
data = data.decode('utf-8')
print(data) # 解密
res = serializer.loads(data)
print(res)

实例user/views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse
from django.core.urlresolvers import reverse # 反响解析
from django.views.generic import View # 导入类试图
from django.conf import settings # 导入配置文件 获取私钥
from itsdangerous import TimedJSONWebSignatureSerializer as Serializer # 导入itsdangerous里面的类 实现加密 import re
from user.models import *
# Create your views here. class RegisterView(View):
'''注册'''
def get(self, request):
'''显示注册页面'''
return render(request, 'register.html') def post(self, request):
'''进行注册处理'''
# 接受数据
username = request.POST.get('user_name')
password = request.POST.get('pwd')
email = request.POST.get('email')
allow = request.POST.get('allow')
# 校验
# 数据完整度
if not all([username, password, email]):
return render(request, 'register.html', {'errmsg': '数据不完整'})
# 邮箱验证
if not re.match(r'^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$', email):
return render(request, 'register.html', {'errmsg': '邮箱格式不正确'})
# 校验协议
if allow != 'on':
return render(request, 'register.html', {'errmsg': '请同意协议'})
# 校验用户是否存在
try:
user = User.objects.get(username=username)
except Exception as e:
user = None
if user:
# 用户已存在
return render(request, 'register.html', {'errmsg': '用户名已存在'}) # 进行用户注册
# create_user() 注册用户
user = User.objects.create_user(username, email, password)
user.is_active = 0 # 0为未激活状态
user.save() # 进行token加密
serializer = Serializer(settings.SECRET_KEY, 3600)
info = {'confirm':user.id}
token = serializer.dumps(info).decode('utf-8') return redirect(reverse('goods:index')) # 用户激活
from itsdangerous import SignatureExpired # 解密信息过期错误
class ActiveView(View):
def get(self, request, token):
'''进行用户激活'''
# 进行解密 获取要激活的用户信息
serializer = Serializer(settings.SECRET_KEY, 3600)
try:
info = serializer.loads(token)
# 获取待激活用户id
user_id = info['confirm'] # 根据id获取用户信息
user = User.objects.get(id=user_id)
user.is_active = 1
user.save() # 跳转登录页面
return redirect(reverse('user:login'))
except SignatureExpired as e:
# 激活链接已过期
return HttpResponse('激活链接已过期')

django-签名加密模块It's dangerous--加密token的更多相关文章

  1. spring security采用基于简单加密 token 的方法实现的remember me功能

    记住我功能,相信大家在一些网站已经用过,一些安全要求不高的都可以使用这个功能,方便快捷. spring security针对该功能有两种实现方式,一种是简单的使用加密来保证基于 cookie 的 to ...

  2. Django中的Cookie、Session、Token

    Cookie : 指望着为了辨别用户身份.进行会话跟踪而存储在用户本地的数据(通常经过加密),是由服务端生成,发送给客户端浏览器,浏览器会将Cookie以key/value保存,下一请求同一网站是就发 ...

  3. 【JWT】JWT+HA256加密 Token验证

    目录 Token验证 传统的Token验证 JWT+HA256验证 回到顶部 Token验证 最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twi ...

  4. Django后台post请求中的csrf token

    使用Requests库操作自己的Django站点,post登陆admin页面返回403,serverlog显示csrf token not set. csrf token是get登陆页面时服务器放在c ...

  5. 登录页面加密token和盐的作用

    盐: 可以说盐是作用于注册,盐就是将用户输入的原始密码,加密后存进数据库,然后把盐(实际上是随机字符串)也存进数据库 Map<String, String> map = new HashM ...

  6. JAVA RSA私钥 加密(签名) 对应 C# RSA私钥 加密(签名)

    非对称密钥RSA算法加解密在C#和Java之间交互的问题,这两天看了很多其他人写的文章,碰到了几个问题,最终解决问题. 参考地址:http://xw-z1985.iteye.com/blog/1837 ...

  7. 对于 前端请求Django 后端服务出现403 Forbidden (CSRF token missing or incorrect.) 问题的解析

    Django中使用ajax post向後臺傳送資料時403 Forbidden (CSRF token missing or incorrect.):的解決辦法 在Django中使用ajax post ...

  8. PHP 之用证书对数据进行签名、验签、加密、解密

    /** * 对数据进行签名 * $data = 'If you are still new to things, we’ve provided a few walkthroughs to get yo ...

  9. Java & PHP RSA 互通密钥、签名、验签、加密、解密

    RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Le ...

随机推荐

  1. football Alternative form of foteball

    football. Alternative form of foteball foteball(Late Middle English) football (game played with a ba ...

  2. Linux中使用MegaCli工具查看、管理Raid卡信息

    MegaCli是一款管理维护硬件RAID软件,可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid 上各磁盘状态,等等.通常,我们对硬盘当前的状态不太好确定, ...

  3. ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi

    写在前面 最近在做一个app的时候发现需要写后台服务.所以,在考虑是使用webapi还是使用webserver来写这个后台服务的时候.爱纠结的我,最后还是选择了使用webapi来写这个后台服务. 原因 ...

  4. MVC中根据后台绝对路径读取图片并显示在IMG中

    数据库存取图片并在MVC3中显示在View中 根据路径读取图片: byte[] img = System.IO.File.ReadAllBytes(@"d:\xxxx.jpg"); ...

  5. np.any()基本用法与不一样环境中的用法

    import numpy as npa=np.ones((2,3,4))b=np.array([1,2,3])c=b<2k=np.any(c) # 是或的关系,只要有一个满足,则输出为TRUEp ...

  6. 数组中[::-1]或[::-n]的区别,如三维数组[:,::-1,:]

    import numpy as npa=np.array([[11,12,13,14,15,16,17,18],[21,22,23,24,25,26,27,28],[31,32,33,34,35,36 ...

  7. 【Java基础】- Java学习路线图

    Java的学习路线图,整理以备自己学习和温习. 1.Java基础 具体内容: 1. 编程基础(开发环境配置.基础语法.基本数据类型.流程控制.常用工具类) 2. 面向对象(继承.封装.多态.抽象类.接 ...

  8. js运算符及数据类型转换(二)

    1.一元运算符+.-[将其它类型转化为number类型,相当于调用了Number()函数]var num = +('hello')  NaN  typeof num->numbernum = + ...

  9. JAVA基础之HttpServletResponse响应

    用户在客户端输入网址(虚拟路径)时,开始发送一个HTTP请求(请求行.请求头.请求体)至服务器.服务器内的Tomcat引擎会解析请求的地址,去找XML文件,然后根据虚拟路径找Servlet的真实路径, ...

  10. 使用SAP Cloud Application Programming模型开发OData的一个实际例子

    刚刚过去的SAP TechEd上,SAP CTO Juergen Mueller向外界传递了一个重要的信息:身处云时代大环境下的SAP从业者,在SAP云平台上该如何选择适合自己的开发方式? Juerg ...