1.8会员登陆和登出

该代码示例展示了一个使用Tornado框架构建的Web应用,包括用户身份验证和安全cookie管理。用户登录时,如果输入错误超过20次会被锁定。登录成功后,用户信息存储在cookie中,可以通过注销功能清除。
摘要由CSDN通过智能技术生成

主文件代码如下:

import tornado.web,tornado.ioloop,os.path,tornado.gen,tornado.escape
from tornado.options import define,options
define('port',default=8888,help='端口',type=int)

class A(tornado.web.RequestHandler):#获取用户的安全cookie信息
    def get_current_user(self):
        return self.get_secure_cookie('user')
class B(A):#身份验证通过后的页面
    @tornado.web.authenticated
    def get(self):
        self.render('index.html')

class C(A):
    @tornado.gen.coroutine#用户输入登录信息,错误超过20次返回登录页面
    def get(self):
        incorrect=self.get_secure_cookie('incorrect')
        if incorrect and int(incorrect) >20:
            self.write('<center>错误次数过多,你被锁住了!</center>')
            return
        self.render('login.html')

    @tornado.gen.coroutine#用户信息验证   
    def post(self):
        incorrect=self.get_secure_cookie('incorrect')
        if incorrect and int(incorrect) >20:
            self.write('<center>错误次数过多,你被锁住了!</center>')
            return
        getusername=tornado.escape.xhtml_escape(self.get_argument('username'))
        getpassword=tornado.escape.xhtml_escape(self.get_argument('password'))
        if '张三'==getusername and '恶势力'==getpassword:
            self.set_secure_cookie('user',self.get_argument('username'))
            self.set_secure_cookie('incorrect','0')
            self.redirect(self.reverse_url('main'))
        else:
            incorrect=self.get_secure_cookie('incorrect') or 0
            increased=str(int(incorrect)+1)
            self.set_secure_cookie('incorrect',increased)
            self.write("""<center>
第(%s)次错误!<br/>
<a href='/'返回主页</a>
</center>"""%increased)

class D(A):#清空在cookie中保存的登录信息并退出系统主页
    def get(self):
        self.clear_cookie('user')
        self.redirect(self.get_argument('next',self.reverse_url('main')))

class E(tornado.web.Application):
    def __init__(self):
        base_dir=os.path.dirname(__file__)
        settings={
            'cookie_secret':'aksjfuuwe/ib8YhuhB/Hy8nwd=',
            'login_url':'/login',
            'template_path':os.path.join(base_dir,'templates'),
            'static_path':os.path.join(base_dir,'static'),
            'debug':True,
            'xsrf_cookies':True,
            }
        tornado.web.Application.__init__(self,[tornado.web.url(r'/',B,name='main'),tornado.web.url(r'/login',C,name='login'),tornado.web.url(r'/logout',D,name='logout'),],**settings)
def main():
    tornado.options.parse_command_line()
    E().listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

if __name__=='__main__':
    main()
            
 

 index.html代码如下:

<!DOCTYPE html>
<html>
<head>
<title>Welcome Back!</title>
</head>
<body>
<h1>欢迎{{ current_user}}登陆本网站</h1>
<a href='/logout'>退出</a>
</body>
</html>

login.html代码如下:

<!DOCTYPE html>
<html>
<head>
<title>Please LOG IN</title>
</head>
<body>
<form action='/login' method='POST'>
<p>用户名:<input type='text' name='username'></p>
<p>密码:<input type='text' name='password'></p>
<p><input type='submit' value=‘登录'></p>
 {% module xsrf_form_html() %}
</form>
</body>
</html> 

结果实例:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值