authencated认证登录

#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>
原文地址:https://www.cnblogs.com/lajiao/p/7801465.html