#coding:utf-8
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import time from tornado.options import define,options
from data.sqlalchemy08 import User,session
from tornado.web import authenticated
define('port',default=8000,help='run port',type=int)
define('version',default='0.0.1',help='version 0.0.1',type=str)
def auth(fun):
def wrapper(self,*agrs,**kwargs):
id=self.get_secure_cookie('ID')
if id:
return fun(self,*args,**kwargs)
else:
self.redirect('/login')
return auth
class BaseHandeler(tornado.web.RequestHandler):
def get_current_user(self):
current_user=self.get_secure_cookie('ID')
if current_user:
return current_user
else:
return None
class IndexHandler(BaseHandeler):
#用auth装饰,可省去大量重复代码,在需要登录的地方调用就可以
# @auth
#从写认证方法中的current_user
# def get_current_user(self):
# current_user = self.get_secure_cookie('ID')
# if current_user:
# return current_user
# else:
# return None
#用tornado自带的认证,需在底部app设置加上登录界面login_url,否则报错,为了再次复用,写个父类
@authenticated
# @tornado.web.authenticated
def get(self):
# id=self.get_secure_cookie('ID')
# if id:
# self.write('登录成功')
# else:
# self.redirect('/login')
self.write('登录成功') class LoginHandler(BaseHandeler):
def get(self):
#self.render('08login.html', error=None)
nextname=self.get_argument('next','')
self.render('11authencated.html',nextname=nextname) def post(self):
nextname = self.get_argument('next', '')
username = User.by_name(self.get_argument('name', ''))
passwd = self.get_argument('passwd', '')
if username and username[0].passwd == passwd:
self.set_secure_cookie('ID',username[0].username,max_age=100)
self.write('登录成功-----')
time.sleep(3)
self.redirect(nextname)
else:
self.redirect('/login') if __name__ == "__main__":
tornado.options.parse_command_line()
# print(options.port)
app=tornado.web.Application(
handlers=[
(r'/index',IndexHandler),
(r'/login',LoginHandler),
],
template_path='templates',
static_path='static',
login_url='/login',
debug=True,
cookie_secret='aaa5555sssss'
#autoescape=None, #关闭自动转义 全局的
)
#固定写法:
http_server=tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

auth.py

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body> <form method="post" action="/login?next={{ nextname }}" >
用户名</br>
<input type="text" name="name" /><br>
<input type="text" name="passwd" /><br>
<input type="submit" value="提交">
</form>
</body>
</html>

最新文章

  1. JavaScript进阶知识点(慕课)
  2. SQL Server Reporting Services (SSRS): Reporting Services in SQL Server 2012 (codename &quot;Denali&quot;) will support XLSX, DOCX formats. Bye bye 65536 rows limit in XLS files ;)
  3. Java并发和多线程(一)基础知识
  4. spring boot properties
  5. cms修改栏目单页样式错位调整
  6. [转]关于 initWithNibName 和 loadNibNamed 的区别和联系-iPhone成长之路
  7. 关于VS2012下安装破解文件Visual Assit X的一点说明
  8. Javascript nextElementSibling和nextSibling
  9. InnoDB: Error: could not open single-table tablespace file
  10. ASP.NET MVC5 视图预编译
  11. Hashtable、synchronizedMap、ConcurrentHashMap 比较
  12. Linux之23个重要命令
  13. SharePoint 2013 新建网站集图解(绝对菜鸟篇)
  14. Resharper 详细教程
  15. JS生成随机数并排序
  16. 系统编码,文件编码,python编码
  17. Java Web开发总结(一)
  18. P3292 [SCOI2016]幸运数字 线性基
  19. 【托业】【新托业TOEIC新题型真题】学习笔记8-题库五-&gt;P7
  20. 1124 Raffle for Weibo Followers (20 分)

热门文章

  1. 归并排序算法Java实现
  2. POJ 2084 Catalan
  3. NC-瑞士军刀NetCat
  4. Github前端项目排名
  5. RedHatEnterpriseLinuxServerRelease7.3上配置vsftpd服务器
  6. fix34
  7. .net 下word 中的图片与文字分离
  8. SQL Server VALUES 使用一记住
  9. selenium获取浏览器控制台日志
  10. 孤荷凌寒自学python第五十三天使用python写入和修改Firebase数据库中记录