BBS论坛(八)
8.1.发送邮箱验证码功能
(1)cms/resetemail.html
{% from 'common/_macros.html' import static %} {% block head %}
<script src="{{ static('cms/js/resetemail.js')}}"></script>
{% endblock %} <input type="email" name="email" placeholder="新邮箱" class="form-control">
<span class="input-group-addon" id="captcha-btn" style="cursor: pointer">获取验证码</span>
(2)cms/js/resetemail.js
/**
* Created by derekon 2018/6/4.
*/ $(function () {
$("#captcha-btn").click(function (event) {
event.preventDefault();
var email = $("input[name='email']").val();
if(!email){
zlalert.alertInfoToast('请输入邮箱');
}
zlajax.get({
'url': '/cms/email_captcha/',
'data': {'email':email},
'success': function (data) {
if(data['code'] == 200){
zlalert.alertSuccessToast('邮件已发送成功!请注意查收!');
}else{
zlalert.alertInfo(data['message']);
}
},
'fail':function (error) {
zlalert.alertNetworkError();
}
});
});
});
(3)cms/views.py
@bp.route('/email_captcha/')
def email_captcha():
#获取要修改的邮箱
email = request.args.get('email')
if not email:
return restful.params_error('请输入要修改的邮箱')
#得到大小写字母的列表
source = list(string.ascii_letters)
#得到大小写字母的列表 + 0到9的数字字符串
source.extend(map(lambda x: str(x), range(0, 10)))
# 随机取六位作为验证码
captcha = "".join(random.sample(source, 6))
#给这个邮箱发送邮件验证码
message = Message(subject='derek论坛密码修改邮件发送', recipients=[email,], body='你的验证码是:%s'%captcha)
try:
mail.send(message)
except:
return restful.server_error()
return restful.success()
输入邮箱,点“获取验证码”
8.2.修改邮箱功能完成
(1)utils/zlcache.py
把验证码保存到memcached中
# utils/zlcache.py import memcache cache = memcache.Client(['139.199.131.146:11211'],debug=True) def set(key,value,timeout=60): #过期时间60s
return cache.set(key,value,timeout) def get(key):
return cache.get(key) def delete(key):
return cache.delete(key)
(2)cms/views.py
zlcache.set(email,captcha) 把邮箱和验证码相关联保存到memcached中
@bp.route('/email_captcha/')
def email_captcha():
.
.
.
.
try:
mail.send(message)
except:
return restful.server_error()
#把邮箱和验证码保存到memcached中
zlcache.set(email,captcha)
return restful.success()
(3)cms/forms.py
from utils import zlcache
from wtforms import ValidationError
from flask import g class ResetEmailForm(BaseForm):
email = StringField(validators=[Email(message="请输入正确格式的邮箱")])
captcha = StringField(validators=[Length(min=6,max=6,message='请输入正确的邮箱验证码')])
# 自定义验证
def validate_captcha(self,field):
#form要提交的验证码和邮箱
captcha = field.data
email = self.email.data
#缓存里面保存的邮箱对应的验证码
captcha_cache = zlcache.get(email)
#如果缓存中没有这个验证码,或者缓存中的验证码跟form提交的验证码不相等(不区分大小写)
# 两个有一个不成立,就抛异常
if not captcha_cache or captcha.lower() != captcha_cache.lower():
raise ValidationError('邮箱验证码错误!') def validate_email(self, field):
email = field.data
user = g.cms_user
if user.email == email:
raise ValidationError('不能修改为当前使用的邮箱!')
(4)cms/js/resetemail.js
$(function () {
$("#submit").click(function (event) {
event.preventDefault();
var emailE = $("input[name='email']");
var captcheE = $("input[name='captcha']"); var email = emailE.val();
var captcha = captcheE.val(); zlajax.post({
'url': '/cms/resetemail/',
'data': {'email': email, 'captcha': captcha},
'success': function (data) {
if (data['code'] == 200) {
emailE.val("");
captcheE.val("");
zlalert.alertSuccessToast('恭喜!邮箱修改成功');
} else {
zlalert.alertInfo(data['message']);
}
},
'fail': function (error) {
zlalert.alertNetworkError();
}
});
});
});
(5)cms/views.py
class ResetEmail(views.MethodView):
def get(self):
return render_template('cms/cms_resetemail.html') def post(self):
form = ResetEmailForm(request.form)
if form.validate():
email = form.email.data
g.cms_user.email = email
db.session.commit()
return restful.success()
else:
return restful.params_error(form.get_error())
现在就可以修改邮箱了。
BBS论坛(八)的更多相关文章
- Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点
开发一个简单的BBS论坛 项目需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被 ...
- python 学习笔记二十 django项目bbs论坛
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
- Python之路,Day17 - 分分钟做个BBS论坛
Python之路,Day17 - 分分钟做个BBS论坛 本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同 ...
- python第一百三十天 ---简单的BBS论坛
简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考“抽屉新热榜” + “博客园” 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 ...
- Django小项目简单BBS论坛
开发一个简单的BBS论坛 项目需求: 1 整体参考"抽屉新热榜" + "虎嗅网" 2 实现不同论坛版块 3 帖子列表展示 4 帖子评论数.点赞数展示 5 在线用 ...
- Python开发一个简单的BBS论坛
项目:开发一个简单的BBS论坛 需求: 整体参考“抽屉新热榜” + “虎嗅网” 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可 ...
- bbs论坛浏览器兼容性问题
一直都是在chrome上进行调试,今天终于把bbs论坛这个项目搭建完了,进入IE.Firefox看了看 吓哭了!!! 火狐 Edge chrome 特别是加了<!DOCTYPE html> ...
- 开源BBS论坛软件推荐
七款开源BBS论坛软件推荐(1) 本文介绍了七个开源的BBS论坛软件(在英文界一般叫做Forum).可能国内的朋友们比较熟悉Discuz!和PHPwind,但其实我们的选择还是很多的,而且下面介绍的这 ...
- LNMP环境搭建BBS论坛及伪静态
我们在mysql备份 LNMP环境中的数据库迁移为独立的服务器的基础上搭建BBS论坛: [root@bqh-117 ~]# mysql -uroot -p123456 Welcome to the ...
- Django项目 BBS论坛
BBS论坛 一.项目表分析 二.自定义form组件 三.注册功能 四.BBS论坛 登录功能
随机推荐
- Node.js 操作 OSX 系统麦克风、扬声器音量
最近几年 Electron 很火,公司也正好有个项目想做跨平台客户端,大家研究了一下就选择了 Electron,第一次做 js 的项目遇到了不少坑,不过也都一点点解决了. 因为项目中需要对用户录音,H ...
- react native 项目版本升级
首先说明一下rn项目的一种相当顺滑升级方法: 1.全局安装react-native-git-upgrade npm i -g react-native-git-upgrade 2. 在项目目录下执行命 ...
- 小程序-canvas在IOS手机层级最高无法展示问题
要求的效果: 正面: 背面: 在开发者工具 利用css 和定位实现了一个版本 .topBox.on { transform:rotateY(180deg); } .topBox { position: ...
- java笔记:排错5:误删maven target:恢复不了,怎么再生成
上篇讲过,误删maven项目的target,或clean以后,target文件夹会删掉. 想要重新加载模块生成最新的target目录,可以再跑一下tomcat. 但有时不灵,可能是因为Tomcat本身 ...
- html动画实现
1.目标动图 2.主要代码 <p><img src="http://img.baidu.com/hi/jx2/j_0043.gif"/><img sr ...
- mpvue中使用wxParse,解析a标签跳转问题
安装:npm i mpvue-wxparse js:import wxparse from "mpvue-wxparse"; css:@import url('~mpvue-wxp ...
- gzip解压文件报错
#tar -xvf jdk-8u131-linux-x64.tar.gz,执行命令后报错如下: gzip: stdin: not in gzip format tar: Child returned ...
- vue-cli 2篇官方文档记录收藏
https://cli.vuejs.org/guide/ http://vuejs-templates.github.io/webpack/
- vue解决加载闪烁问题
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- C# 中传参中的OUT 和 ref 区别 笔记
//out传参前需要对参数进行赋值处理,ref则不需要.//out.ref 传参都可以对值进行改变 1 static void Main(string[] args) { ; //int J = 10 ...