赞
踩
通过正则表达式判断邮箱格式是否正确,转义字符,用户名@服务器域名,用户名只能以数字或字母开头和结尾。
- regexp = '^[a-zA-Z0-9][a-zA-Z0-9_-]*[a-zA-Z0-9]@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]{2,4}){1,}$'
- pat = re.compile(regexp)
- isok = pat.match(reg_mail)
Python里正则表达式需转换为模式对象,使用re模块的compile()方法。
主要有邮箱的配置(包括服务器、端口、使用的TLS或SSL加密、用户名、授权码等),异步函数里的app.app_context()获取当前应用的上下文,邮件发送函数send()的实现,多线程的使用。
- # 异步发送邮件
- def send_async_email(app, msg):
- with app.app_context():
- mail.send(msg)
-
-
- # 视图函数名称不能设置为mail,否则会报错
- def send_mail(to, subject, template, **kwargs):
- # 创建信息实例,recipients是个列表,包含所有收件人,Hello是邮箱的主题
- msg = Message(subject, recipients=[to])
-
- # 邮件发送给目标,可以有文本,两种方式呈现,你能看见怎样的取决于你的客户端
- # msg.body = render_template(template + '.txt', **kwargs)
- msg.html = render_template(template + '.html', **kwargs)
-
- # 使用多线程,在实际开发中,若是不使用异步、多线程等方式,网页会卡住
- thr = Thread(target=send_async_email, args=[app, msg])
- thr.start()
- return thr

1、添加用户类的相关字;
2、用户类里添加生成账户激活的token(标识)和验证账户激活的token两个方法;
- def generate_activate_token(self, expiration=3600):
- # 这个函数需要两个参数,一个密匙,从配置文件获取,一个时间,这里1小时
- s = Serializer(current_app.config['SECRET_KEY'], expiration)
- # 为ID生成一个加密签名,然后再对数据和签名进行序列化,生成令牌版字符串(就是一长串乱七八糟的东西),然后返回
- return s.dumps({'id': self.id})
-
- # 账户激活(静态方法),所有用户共用此方法?
- @staticmethod
- def check_activate_token(token):
- # 传入和刚才一样的密匙,解码要用
- s = Serializer(current_app.config['SECRET_KEY'])
- try:
- data = s.loads(token) # 解码
- except:
- return False
- u = User.query.get(data['id'])
- if not u:
- # 用户已被删除
- return False
- if not u.status:
- u.status = True
- db.session.add(u)
- db.session.commit()
- return True

3、视图模块里注册函数调用token生成函数以及发送邮件;
4、视图模块里调用token验证函数实现激活判断函数,通过装饰器链接url并由email.html文件调用。
- @app.route('/activate/<token>/')
- def activate(token):
- if User.check_activate_token(token):
- flash('激活成功')
- return redirect('/regloginpage/')
- else:
- flash('激活失败')
- return redirect('/')
<p>请点击右边的激活按钮激活你的账号:<a href="{{ url_for('activate', token=token, _external=True) }}">激活</a></p>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。