博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tornado 基于MongoDB存储 session组件开发
阅读量:5167 次
发布时间:2019-06-13

本文共 3244 字,大约阅读时间需要 10 分钟。

1.开发伊始

根据源码中RequestHandler类中发现__init__函数中会调用自身initialize函数,此函数中为pass,即可以围绕initialize开发一系列的组件

2.开发实现

通过继承实现接口initialize的重写

3.具体代码与实现过程

1)接口

class SessionInterface(object):    def initialize(self):        self.session = Session(self)        super(SessionInterface, self).initialize()

2)session

class Session(object):    def __init__(self, headler):        self.random_str = None    #随机字符串        self.headler = headler    #Handler对象,通过接口中传参self实现        self.last_session = self.headler.get_cookie('session')    #获取之前session        self.db = MongoDB()      #数据保存方法,这里为MongoDB        if self.last_session:          #若存在之前的cookie,则在数据库中查看是否存在此session            C = self.db.find(self.last_session, 'random_id')              if C == self.last_session:                self.random_str = self.last_session  #存在则给随机字符串赋值为原session            else:                self.random_str = self.set_random_str()  #不存在则生成随机字符串,并且存储到数据库中                self.db.insert_set_name(self.random_str)          else:            self.random_str = self.set_random_str()    #不存在则生成随机字符串,并且存储到数据库中            self.db.insert_set_name(self.random_str)    def clear(self):        self.headler.clear_all_cookies()      #清空session    def set_random_str(self):      """       生成随机字符串       """        v = str(time.time())        a = hashlib.md5()        a.update(bytes(v, encoding='utf-8'))        return a.hexdigest()    def __getitem__(self, key):      """       此内置函数通过session[key]形式调用      """        result = self.db.find(self.random_str, key)        return result    def __setitem__(self, key, value):      """       此内置函数通过session[key] = value形式调用      """        self.headler.set_cookie('session', self.random_str)        C = self.db.find(self.random_str, 'random_id')        if C:            self.db.update(self.random_str, key, value)        else:            self.db.insert_set_name(self.random_str)            self.db.update(self.random_str, key, value)    def __delitem__(self, key):      """       此内置函数通过del session[key]形式调用执行      """        self.db.remove(self.random_str, key)

3.MongoDB

class MongoDB(object):    def __init__(self):        client = pymongo.MongoClient(host='localhost', port=27017)        self.collection = client.session.sessiondb    def insert_set_name(self, random_str):        #存储session随机字符串        set_name = {
'random_id': random_str} self.collection.insert_one(set_name) def update(self, random_str, key, value): condition = {
'random_id': random_str} result = self.collection.find_one(condition) result[key] = value self.collection.update(condition, result) def find(self, random_str, key): condition = {
'random_id': random_str} result = self.collection.find_one(condition) if result: return result[key] def remove(self, random_str, key): condition = {
'random_id': random_str} result = self.collection.find_one(condition) del result[key] self.collection.update(condition, result)

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

转载于:https://www.cnblogs.com/lpapython/p/10782579.html

你可能感兴趣的文章
华为面试
查看>>
平衡二叉树(AVL Tree)
查看>>
【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
查看>>
【CF799E】Aquarium decoration 线段树
查看>>
大运飞天 鲲鹏展翅
查看>>
从ECMA到W3C
查看>>
OpenGL(十八) 顶点数组和抗锯齿(反走样)设置
查看>>
Activiti 删除key值相同的所有不同版本的流程定义
查看>>
软件工程--第十六周学习进度
查看>>
yii2 ActiveRecord多表关联以及多表关联搜索的实现
查看>>
搜狗输入法安装--ubuntu
查看>>
ps/2接口键盘的输入及显示
查看>>
在IntelliJ IDEA中安装Junit,TestNG
查看>>
C-Scanf连续调用多次并且存在%c的问题
查看>>
JAVA(二)异常/包及访问权限/多线程/泛型
查看>>
1-4 金币阵列问题
查看>>
设计模式-结构型模式
查看>>
六星经典CSAPP笔记(1)计算机系统巡游
查看>>
css
查看>>
爬取全部的校园新闻
查看>>