Tornado之抽屉实战(3)--注册

知识点应用:标签绑定事件,jQuery获取用户值--》AJAX发送数据--》后台路由系统--》业务逻辑处理--》ORM数据操作--》write返回--》AJAX回调函数接收--》页面效果显示
第一步:我们要给前端的获取验证码按钮绑定一个onclick事件--发送邮件验证码
- 找到views下home index.html找到标签,onclick=SendCode(this)
- 定义事件,获取邮箱,发送ajax请求
jQuery代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function SendCode(this){ var email = $(#xiang).val(); $.ajax({ url:'/send_code', type:'POST', data:{em:email}, success:function(arg){ console.log(arg); }, error:function(){ } })} |
- 发送请求后,后台就要接收数据了,首先要先到路由系统里配置url

- 配置好后,接下来就是业务逻辑,找到controllers account编写SendCodeHandler类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class SendCodeHandler(BaseRequestHandler): def post(self,*args,**kwargs): #定制信息 ret = {"status":True,"data":"","error":""} email = self.get_argument('em',None) if email: #如果有值,生成随机验证码,并发送邮箱 code = commons.randon_code() message.email([email,],code) #创建session连接 conn = chouti_orm.session() #生成临时表对象,并写入到临时表 obj = chouti_orm.SendCode(email=email,code=code,stime=datetime.datetime.now()) conn.add(obj) conn.commit() self.write(json.dumps(ret)) else: #如果没有,就改变False状态,加上错误信息 ret["status"] = False ret["error"] = "邮箱格式错误" self.write(json.dumps(ret)) |
在上面这个过程中,由于用到临时存储的临时表,所以我们要在chouti_orm.py定义一个SendCode类做为临时表
|
1
2
3
4
5
6
7
8
9
10
11
|
class SendCode(Base): __tablename__ = "sendcode" #注册时验证码信息 nid = Column(Integer, primary_key=True, autoincrement=True) email = Column(String(32),index=True) code = Column(String(6)) # status = Column(Integer) #状态码,0表示未注册,1成功,2拉黑 #验证码的有效时间 stime = Column(TIMESTAMP) #发送时间 |
- ajax的回调函数接收到数据后,js处理把应有的效果显示到页面上
第二步:点击注册,携带填写信息进行验证
- 给注册的标签绑定SubmitRegister事件,并且给要提交信息的标签绑定一个特定的class
- 事件里,注册状态的变更,发送ajax请求
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
function SubmitRegister(ths){ $(ths).children(':eq(0)').addClass('hide'); $(ths).addClass('not-allow').children(':eq(1)').removeClass('hide'); // 发送Ajax请求 //获取用户输入的所有内容(定义一个特定的class或自定义属性) var post_dict = {} $(".regiter_temp").each(function(){ var input_val = $(this).val(); var name_val = $(this).attr("name"); post_dict[name_val]=input_val; }) console.log(post_dict); //发送ajax请求 $.ajax({ url:"/register", type:"POST", data:post_dict, success:function(arg){ console.log(arg); //arg是字符串 var obj = JSON.parse(arg); if(obj.status){ //注册成功---跳转(已登录状态--session实现) location.href = "/index"; }else{ alert(obj.error); } } }) //完成之后 $(ths).removeClass('not-allow').children(':eq(1)').addClass('hide'); $(ths).children(':eq(0)').removeClass('hide');} |
- 根据用户提交过来的信息到临时表(验证码表)里进行筛选,注册成功就session保存登陆状态
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
class RegisterHandler(BaseRequestHandler): def post(self, *args, **kwargs): ret = {"status":True,"data":"","error":""} #获取用户输入的所有内容 #code = sendcode 匹配 邮箱 #注册 #conn.add(obj) #conn.commit() conn = chouti_orm.session() #创立连接 #根据用户提交过来的验证码和邮箱 到 临时表里去筛选 r = conn.query(chouti_orm.SendCode).filter(code=123,email='111').first() if not r: #如果没有,返回错误信息 ret['status'] = False ret["error"] = "邮箱验证码错误" self.write(json.dumps(ret)) else: #临时表里有,就注册成功,实例用户信息对象,跟新到userinfo表里 obj = chouti_orm.UserInfo() conn.add(obj) conn.commit() #session保存用户登陆状态 self.session["is_login"] = True #保存用户 self.session['username'] = '用户输入的用户名' self.write(json.dumps(ret)) |
- ajax回调函数接收数据,注册成功就跳转到首页,并显示登陆状态
你们可能有疑问,好像注册时没对邮箱是否已经注册进行验证,对吧,这里可以在填邮箱的标签定义onblur事件--发送ajax请求,到后台去userinfo表进行检测并且返回结果就可以了
Tornado之抽屉实战(3)--注册的更多相关文章
- Tornado之抽屉实战(1)--分析与架构
项目模拟地址:http://dig.chouti.com/ 知识点应用: AJAX 用于偷偷发请求 原生ajax jQuery ajax($.ajax) iframe伪造 上传文件 传统Form ...
- Tornado之抽屉实战(2)--数据库表设计
经过我们上次分析,数据库要有最基本的四张表,用户表,消息表,类型表,点赞表,评论表,接下来我们看着怎么设计吧 首先我们要清楚,表设计的代码是写在models下的 用户表 ? 1 2 3 4 5 6 7 ...
- Android项目实战登录&注册
由于项目中大部分界面都有一个后退键和一个标题栏,为避免代码冗杂以及便于利用,我们可以将后推荐和标题栏单独抽取出来定义一个标题栏布局,在 res/layout 目录下新建一个 Layout resour ...
- Android项目实战登录&注册
由于项目中大部分界面都有一个后退键和一个标题栏,为避免代码冗杂以及便于利用,我们可以将后推荐和标题栏单独抽取出来定义一个标题栏布局,在 res/layout 目录下新建一个 Layout resour ...
- KotlinMall实战之注册部分MVP架构配置
包目录如下: ①BaseView部分:基本的回调 interface BaseView { fun showLoading() fun hideLoading() fun onError()} ②Ba ...
- 抽屉之Tornado实战(9)--装饰器实现用户登录状态验证
当然今天讲的验证,不只Tornado会用,以后用到web框架都会用到,最常见的场景就是只有用户登陆了才能执行某些操作,所以在执行这些操作前要先做登陆状态的验证. 比如:点赞,发布,评论等需要验证,都需 ...
- java入门第五步之数据库项目实战【转】
在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...
- tornado框架之路一
Web 服务器 每个页面都以 HTML 的形式传送到你的浏览器中,HTML 是一种浏览器用来描述页面内容和结构的语言.那些负责发送 HTML 到浏览器的应用称之为“Web 服务器”,会让你迷惑的是,这 ...
- React.js 入门与实战之开发适配PC端及移动端新闻头条平台课程上线了
原文发表于我的技术博客 我在慕课网的「React.js 入门与实战之开发适配PC端及移动端新闻头条平台」课程已经上线了,文章中是目前整个课程的大纲,以后此课程还会保持持续更新,此大纲文档也会保持更新, ...
随机推荐
- Redis补充
Redis补充 (1)redis基本概念 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set ...
- 单项选择RadioButton和多项选择CheckBox的使用
在Android中,可以通过RadioButton和RadioGroup的组合来实现单项选择的效果.而多项选择则是通过CheckBox来实现的. 1.单项选择RadioButton 我们知道,一 ...
- python web开发配置
安装python(最好是2.*版本) 安装easyinstall 参考Windows 下 Python easy_install 的安装 完成之后注意环境变量的配置 在系统环境变量的PATH中添加ea ...
- LINUX 修改本机yum源为163镜像源
进入yum源配置目录 [root@localhost yum.repos.d]# cd /etc/yum.repos.d/ 备份系统yum源,用于日后恢复. [root@localhost yum.r ...
- Python之xpath
xpath是一种在XML文档中定位元素的语言,常用于xml.html文件解析,比css选择器使用方便XML文件最小构成单元: - element(元素节点) - attribute(属性节点) - t ...
- 图解Fiddler如何抓手机APP数据包过滤抓取
使用fidder抓取浏览器的包相信不是问题,那么使用fidder 抓取app的数据包呢??? 于是,找了一篇博客来学习一下,可以参考一下,根据自己的需求来实现. 在网上自己学习,然后整理了我所用到的, ...
- hibernate正向工程生成数据库
hibernate正向工程生成数据库 hibernate.cfg.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 ...
- 数据结构(栈&堆 )
在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存储区,主要功能 ...
- 转载关于reset vector 和 exception vector
在NIOS II学习过程中设置CPU参数的时候,遇到Reset Vector和Exception Vector的设置.参数设置画面如下图所示. Reset Vector——复位向量Exception ...
- PHP使用curl请求https站点的常见错误及解决方案
使用curl请求http站点和https站点最大的不同就是https站点有证书验证这一环节,如果证书验证不通过则无法发起请求,不管是请求什么类型的站点遇到问题时先把错误码打印出来看一下,打印错误码的代 ...