主文件代码如下:
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>
结果实例: