web.py是一個python的web開發框架,既然涉及到web開發,那麼不可避免的可能使用到session,而傳統的session存儲基本都是默認在磁碟,當然考慮到web前端機的擴展我們經常需要重寫sessionhandler來自定義session的存儲。下面學步園小編來講解下怎樣使用MongoDB來實現web.py的session存儲?
怎樣使用MongoDB來實現web.py的session存儲
fromweb.sessionimportStore
importtime
classMongoStore(Store):
def__init__(self,db,collection_name):
self.collection=db[collection_name]
def__contains__(self,key):
data=self.collection.find_one({'session_id':key})
returnbool(data)
def__getitem__(self,key):
now=time.time()
s=self.collection.find_one({'session_id':key})
ifnots:
raiseKeyError
else:
s.update({'attime':now})
returns
def__setitem__(self,key,value):
now=time.time()
value['attime']=now
s=self.collection.find_one({'session_id':key})
怎樣使用MongoDB來實現web.py的session存儲
ifs:
value=dict(map(lambdax:(str(x[0]),x[1]),[(k,v)for(k,v)invalue.iteritems()ifknotin['_id']]))
s.update(**value)
self.collection.save(s)
else:
self.collection.insert(value)
def__delitem__(self,key):
self.collection.remove({'session_id':key})
defcleanup(self,timeout):
timeout=timeout/(24.0*60*60)#timedeltatakesnumdaysasarg
last_allowed_time=time.time()-timeout
self.collection.remove({'attime':{'$lt':last_allowed_time}})
然後在app中替換掉使用磁碟進行存儲的申明,用
session=web.session.Session(app,MongoStore(db,'sessions'))
替換掉:
session=web.session.Session(app,web.session.DiskStore('sessions'))。
以上就是關於「怎樣使用MongoDB來實現web.py的session存儲」的內容,希望對大家有用。更多資訊請關注學步園。學步園,您學習IT技術的優質平台!