亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 5957 | 回復(fù): 1
打印 上一主題 下一主題

[MongoDB] 使用MongoDB來(lái)實(shí)現(xiàn)web.py的session存儲(chǔ) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-02-23 18:35 |只看該作者 |倒序?yàn)g覽
使用MongoDB來(lái)實(shí)現(xiàn)web.py的session存儲(chǔ)






web.py 是一個(gè)python的web開(kāi)發(fā)框架,既然涉及到web開(kāi)發(fā),那么不可避免的可能使用到session,而傳統(tǒng)的session存儲(chǔ)基本都是默認(rèn)在磁盤(pán),當(dāng)然考慮到web前端機(jī)的擴(kuò)展我們經(jīng)常需要重寫(xiě)session handler來(lái)自定義session的存儲(chǔ)。下面就是在web.py框架中使用MongoDB作session存儲(chǔ)的例子了。
  1. from web.session import Store
  2. import time

  3. class MongoStore(Store):
  4.     def __init__(self, db, collection_name):
  5.         self.collection = db[collection_name]

  6.     def __contains__(self, key):
  7.         data = self.collection.find_one({'session_id':key})
  8.         return bool(data)

  9.     def __getitem__(self, key):
  10.         now = time.time()
  11.         s = self.collection.find_one({'session_id':key})
  12.         if not s:
  13.             raise KeyError
  14.         else:
  15.             s.update({'attime':now})
  16.             return s

  17.     def __setitem__(self, key, value):
  18.         now = time.time()

  19.         value['attime'] = now

  20.         s = self.collection.find_one({'session_id':key})
  21.         if s:
  22.             value = dict(map(lambda x: (str(x[0]), x[1]), [(k,v) for (k,v) in value.iteritems() if k not in ['_id']]))
  23.             s.update(**value)
  24.             self.collection.save(s)
  25.         else:
  26.             self.collection.insert(value)

  27.     def __delitem__(self, key):
  28.         self.collection.remove({'session_id':key})

  29.     def cleanup(self, timeout):
  30.         timeout = timeout/(24.0*60*60) #timedelta takes numdays as arg
  31.         last_allowed_time = time.time() - timeout
  32.         self.collection.remove({'attime' : { '$lt' : last_allowed_time}})
復(fù)制代碼
然后在app中替換掉使用磁盤(pán)進(jìn)行存儲(chǔ)的申明,用

session = web.session.Session(app, MongoStore(db, 'sessions'))替換掉:

session = web.session.Session(app, web.session.DiskStore('sessions'))來(lái)源:python.cn


論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-02-24 17:09 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP