本文参考自: 原文地址
问题描述:
由于tornado没有session模块,无法使用全局session,如果想实现base.html显示登陆信息,需要每个页面进行cookie值的返回操作,显然太过麻烦。所以有以下解决办法:
1.准备工作
设置随机cookie密文:
方法:如下方式生成后粘贴至如下标红行即可
import base64,uuid base64.b32encode(uuid.uuid4().bytes+uuid.uuid4().bytes)
main.py:
settings = { "template_path" : os.path.join(os.path.dirname(__file__), "templates"), "static_path" : os.path.join(os.path.dirname(__file__), "static"), "cookie_secret": "UBLCVY4D3BBR5LSY2DXJU6X46JOQTEELLFSUTWFJ4JOSXDU5ICOQ====", "login_url": "/login", "xsrf_cookies": True }
2.实现过程
有了密文,即可调用get_secure_cookie/set_secure_cookie方法了。
在views层(或其他文件)定义一个单独的BaseHandler类,对get_secure_cookie进行封装,使用的时候只需用变量接收self.current_user。
baseview.py:
import tornado.web class BaseHandler(tornado.web.RequestHandler): """docstring for BaseHandler""" def get_current_user(self): return self.get_secure_cookie('username')
3.使用方法
在需要调用cookie的类中继承Basehandler类,如:
class LogOut(BaseHandler,tornado.web.RequestHandler): def get(self, *args, **kwargs): self.clear_cookie('username') self.redirect('/')
这个类是清除cookie,退出。
设置cookie:set_secure_cookie("username",username)
如果是获取,只需用变量接收self.current_user。
补充:
表单验证csrf_cookie,详情见官方文档。