tornado 基于MongoDB存储 session组件开发
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了tornado 基于MongoDB存储 session组件开发,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2727字,纯文字阅读大概需要4分钟。
内容图文
![tornado 基于MongoDB存储 session组件开发](/upload/InfoBanner/zyjiaocheng/1092/f38d3babcb364e498b71a1e090c1bed5.jpg)
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
内容总结
以上是互联网集市为您收集整理的tornado 基于MongoDB存储 session组件开发全部内容,希望文章能够帮你解决tornado 基于MongoDB存储 session组件开发所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。