tornado之cookie验证

本文参考自: 原文地址

问题描述:

       由于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,详情见官方文档。

猜你喜欢

转载自blog.csdn.net/qq_39706019/article/details/81505646