Django发送邮件和itsdangerous模块的配合使用解析

  

<强>项目需求:用户注册页面注册之后,系统会发送一封邮件到用户邮箱,用户点击链接以激活账户,其中链接中的用户信息需要加密处理一下
  

  

其中激活自己邮箱的smtp服务的操作就不在加以说明,菜鸟教程上有非常清晰的讲解,也可以去网上搜索详细步骤
  

  

首先在Django项目的设置文件中配置发送邮件相关的配置如下:
  

        #固定写法   EMAIL_BACKEND=' django.core.mail.backends.smtp.EmailBackend '   # smtp服务器地址   EMAIL_HOST=' smtp.qq.com '   #固定端口号   EMAIL_PORT=25   #发送邮件的邮箱   EMAIL_HOST_USER=' 2746565701 @qq.com '   #在邮箱中设置的客户端授权密码   EMAIL_HOST_PASSWORD=' ytnvwapcbxmcdfig '   #收件人看到的发件人,尖括号中的必须与上面的用户一致   EMAIL_FROM='天天生鲜& lt; 2746565701 @qq.com>”      

用户模块的观点。py文件关于itsdangerous和邮件发送的代码如下,项目其它部分的操作代码这里全部删除,这里使用的是基于类的视图:
  

  

<>强基本逻辑:

  
      <李>利用itsdangerous模块对链接中的用户信息加密,生成加密后的用户信息令牌,李   <李>调用Django发送邮件的相关方法,进行发送邮件(邮件的配置已经配置好),李   <李>邮件发送的链接中有一个可变参数,包含着用户id加密后的信息,李   <李>用户接收到邮件之后,点击链接,跳转到对应的视图类进行处理,李   <李>负责激活的视图类,解密用户的信息,获取用户id、查询到对应用户(在这个过程会判断被加密的信息是否超时),李   <李>将对应用户中数据库中用户表中is_active字段的值改为1,表示此用户被激活;李   <李>跳转到首页;李   
        #导入itsdangerous中要用到的加密类   从进口TimedJSONWebSignatureSerializer itsdangerous序列化器   #导入itsdangerous中超时的异常   从itsdangerous进口SignatureExpired   #导入配置文件   django。配置导入设置   #导入Django中的发送邮件的方法   从django.core。邮件导入send_mail   从用户得进口            #创建你的观点。   类RegisterView(观点):   ”““注册”“”   ....................      def post(自我,请求):   ”““进行注册处理”“      #发送激活邮件,包含一个激活的链接:https://127.0.0.1:8000/user/主动/3   #激活链接中需要包含用户的身份信息,并且要把身份信息进行加密      #加密用户的身份信息,生成激活的令牌   序列化器=序列化器(设置。SECRET_KEY, 3600) #创建爱一个itsdangerous模块中加密类的对象,其中SECRET_KEY用中设置的,第二个参数为超时时间   信息={“确认”:用户。id} #被加密的信息,一个字典,字典值为接收邮件用户的id   #利用转储方法进行加密、加密后为字节数据   令牌=serializer.dumps(信息)#字节数据   令牌=token.decode转str() #字节   #发邮件   主题='天天生鲜欢迎信息的#邮件主题   消息="邮件信息,因为有html__message了,所以这里为空就好   发送方=设置。EMAIL_FROM #发送者,直接从配置文件中导入上面配置的发送者   接收机=(电子邮件)#接收者的邮箱,是一个列的表,这里是前端用户注册时传过来的电子邮件   # html结构的信息,其中包含了加密后的用户信息令牌   html_message=' & lt; h2>{},欢迎您成为天天生鲜注册会员& lt;/h2>请点击下面链接激活您的用户& lt; br> & lt; a href=" https://www.yisu.com/zixun/http 127.0.0.1:8000/user/主动/{}“rel=巴獠縩ofollow”在http: 127.0.0.1:8000/user/主动/{}& lt;/a> '。格式(用户名令牌,令牌)   #调用Django发送邮件的方法,这里传了5个参数   send_mail(主题、消息发送方、接收方、html_message=html_message)   #返回应答:跳转到首页   返回重定向(反向(“商品:指数”))         类ActiveView(观点):   ”“用户激活”“”   def(自我、请求令牌):   ”““进行用户激活”“   #进行解密,获取要激活的用户信息   序列化器=序列化器(设置。SECRET_KEY, 3600)   试一试:   #通过itsdangerous模块的加载方法解密   信息=serializer.loads(令牌)   #获取待激活用户的id   user_id=info.get(确认)   #根据id获取用户信息   用户=User.objects.get (id=user_id)   #激活用户操作,将数据库中对应用户的is_active参数变为1   用户。is_active=1   user.save ()   #跳转到登录界面   返回重定向(反向(“用户登录”))   除了SignatureExpired e:   #激活链接已经过期   返回HttpResponse(“激活链接已过期!”)

Django发送邮件和itsdangerous模块的配合使用解析