web.py笔记gae的session总结
- 博客分类:
- python
这几天利用gae部署webpy的小东西
感慨颇多
1 gae是2.5的python
2 gae自己的框架特别类似web.py,又内置了django,但是web.py需要自己部署
3 gae对web.py并不是那么友好
部署的东西,可以参考
http://www.longtask.com/blog/?tag=gae
web.py自带的session不能用,有3种思路,
一种是刚才url里提到的memcache
但是他的sesion写法有错误,我跟了半天才看到,第33行
from web.session import Store from google.appengine.api import memcache import web import time class MemcacheStore(Store): def __init__(self, memcache): self.memcache = memcache def __contains__(self, key): data = self.memcache.get(key) return bool(data) def __getitem__(self, key): now = time.time() value = self.memcache.get(key) if not value: raise KeyError else: value['attime'] = now self.memcache.replace(key,value) return value def __setitem__(self, key, value): now = time.time() value['attime'] = now s = self.memcache.get(key) if s: #value = dict(map(lambda x: (str(x[0]), x[1]), [(k, v) for (k, v) in value.iteritems() if k not in ['_id']])) self.memcache.replace(key,value) else: #self.memcache.add(key,value,int(web.config.session_parameters['timeout'][0])) self.memcache.add(key,value,web.config.session_parameters['timeout']) def __delitem__(self, key): self.memcache.delete(key) def cleanup(self, timeout): #timeout = timeout / (24.0 * 60 * 60) #last_allowed_time = time.time() - timeout #self.collection.remove({'attime' : { '$lt' : last_allowed_time}}) #automatic cleanup the session #self.memcache.flush_all() pass
用的时候,在code.py里
from google.appengine.api import memcache
.....
store = web.session.MemcacheStore(memcache)
session = web.session.Session(app, store, initializer={'count': 0})
当然,在查的时候,陆续还发现了好几个版本,
譬如 http://wangfsec.iteye.com/blog/955673
import memcache as memcache from web.session import Store class MemcacheStore(Store): def __init__(self, config): ''' config = { 'servers': ['127.0.0.1:11211'], 'timeout': 1440 } ''' self.mc = memcache.Client(config['servers']) self.timeout = config['timeout'] def __contains__(self, key): return True if self.mc.get(key) else False def __getitem__(self, key): return self.mc.get(key) def __setitem__(self, key, value): self.mc.set(key, value, self.timeout) def __delitem__(self, key): self.mc.delete(key) def cleanup(self, timeout): '''You need nothing to do. Memcache can handle it.''' pass
还有一个版本,(忘记出处了,实在对不起这位哥)
class MemcacheStore(Store): def __init__(self): pass def __contains__(self, key): return True if memcache.get(key) else False def __getitem__(self, key): atime, v = memcache.get(key) self[key] = v return v def __setitem__(self, key, value): memcache.set(key, (time.time(), value)) def __delitem__(self, key): memcache.delete(key) def cleanup(self, timeout): pass # TODO
使用的时候,先把上面3个版本的代码选一个贴在web.session.py文件里,别忘了import memcache,
然后根据各自的init方法,在code.py里初始化就可以
譬如上面的这个初始化应该是
store = web.session.MemcacheStore()
第二种思路是利用dbstore http://code.google.com/p/gae-webpy-blog/source/browse/trunk/gae-webpy-blog/src/web/?r=3
可以看这个项目的解决方法
class GoogleStore(Store):
"""Google Datastore""" def __init__(self, prefix="p"): self.prefix=prefix def __contains__(self, key): return WebpySession.get_by_key_name(self.prefix+key) is not None def __getitem__(self, key): try: return pickle.loads(WebpySession.get_by_key_name(self.prefix+key).data) except AttributeError: raise KeyError, key def __setitem__(self, key, value): r = WebpySession.get_or_insert(self.prefix+key) r.data = pickle.dumps(value) r.put() def __delitem__(self, key): try: WebpySession.get_by_key_name(self.prefix+key).delete() except AttributeError: pass def cleanup(self, timeout): db.delete(WebpySession.all().filter('atime <', datetime.datetime.now()-datetime.timedelta(seconds=timeout)).fetch(CLEANUP_BATCH_SIZE))
session = web.session.Session(app, web.session.GoogleStore('colablog-session'), initializer={'user': 'anonymous', 'login': False, }, cache_handler=del_all)
第三种思路 是利用beaker这种通用session,可以参看http://simple-is-better.com/news/170
其实,最简单的嘛,还是像上面这个url里提到的一样,用google自己的session类,可惜移植性就差了
webpy官方怎么没有个正式方法呢???
补全 gae-sessions
https://github.com/dound/gae-sessions
竟然还有这种东西存在
曾经以为是gae官方的呢,后来才发现是中间件
发表评论
-
用webpy+gae做一个隐藏播放文件地址的东东,失败了2 -半成功
2012-04-23 21:14 1010昨天说到失败了想换一个html5播放器试试其实跟播放器根本没有 ... -
用webpy+gae做一个隐藏播放文件地址的东东,失败了
2012-04-22 22:52 1362很简单 想把一些mp3文件放到gae上,不过不想被下载,虽 ... -
用chrome访问gae的static文件的问题
2012-04-21 14:49 2658Traceback (most recent call ... -
一篇写的还不错的gae入门
2012-04-08 20:37 1030经过一段时间的摸索,感觉gae已经入门了 特地把查到的资料上 ... -
web.py笔记db处理 坑爹_test=True
2012-03-04 15:44 3280http://webpy.org/cookbook/Inser ... -
web.py笔记 表单post的checkbox
2012-03-02 23:40 3628<p> <label for=&quo ... -
web.py笔记 中文html
2012-03-01 00:37 1370本来今天测试的是数据库 结果在template的html里面 ... -
web.py笔记模板3 i18n 切换
2012-02-26 21:42 1675研究了很久pot,po,gettext,poedit的文档 ... -
web.py笔记模板2 i18n准备po和mo文件
2012-02-22 22:23 1725其实,今天晚上本来像做i18n的 http://webpy. ... -
web.py笔记模板1
2012-02-21 22:27 3446http://webpy.org/docs/0.3/templ ... -
web.py笔记 cookie
2012-02-19 16:28 1496官方url http://webpy.org/co ... -
web.py笔记 大块文件下载
2012-02-17 22:26 4650官方url http://webpy.org/cook ... -
web.py笔记 处理404 500
2012-02-12 22:50 3165官方cookbook http://webpy. ... -
wing ide 设置
2012-02-12 22:43 11334用惯了eclipse,这个轻量级的wingide 还真是有点不 ... -
web.py笔记ctx
2012-02-12 16:48 4889http://webpy.org/cookbook/ctx ... -
web.py笔记ssl 续 apache
2012-02-11 22:32 1386对前几天ssl的连接方式,仍然比较担心 感觉不是那么妥当 ... -
web.py笔记ssl 坑爹
2012-02-09 21:42 3809今天又回过神来,准备看看web.py的ssl支持 结果调了半 ... -
web.py 笔记 控制url
2012-01-15 22:54 4112web.py 的url控制说明 ,官方的中文coo ... -
web.py笔记session
2012-01-08 21:58 4162官方的例子 http://webpy.o ... -
web.py
2012-01-04 21:37 7561http://webpy.org/ import ...
相关推荐
**web.py 中文教程概述** `web.py` 是一个轻量级、简洁且灵活的 Python Web 开发框架,它提供了一种快速构建 Web 应用程序的方法。本教程旨在为初学者提供关于 web.py 的详细指导,涵盖从基础应用到高级特性的全...
这个库是专门为Google App Engine (GAE)开发的,GAE是一个云服务平台,允许开发者构建和运行Web应用程序。`appfy.recipe.gae`库是使用Buildout工具来管理和配置GAE项目的一部分。 描述中提到的"python库。资源全名...
这是webpy.org官网webpy cookbook的离线版.由于官网没有提供离线版所以学习起来很不方便.故本人做了个离线版的cookbook,并且每个文件都重新编辑,花了一整个下午,为了方便更多人使用,故传上来和大家共享.祝大家学习...
基于Google.App.Engine(GAE)的Java和GWT应用开发
[基于Google.App.Engine(GAE)的Java和GWT应用开发].(Google.App.Engine.Java.and.GWT.Application.Development).Daniel.Guermeur.文字版
appfy.recipe.gae appfy.recipe.gae 提供了一系列配方来帮助开发。 它的灵感来自于 ,但使用了不同的布局和扩展的功能。 它也分为不同的食谱。 目前 appfy.recipe.gae 有 3 个食谱: appfy.recipe.gae:app_lib: 从 ...
中文名: 基于Google App Engine(GAE)的Java和GWT应用开发 原名: Google App Engine Java and GWT Application Development 作者: Daniel Guermeur, Amy Unruh 资源格式: PDF 版本: 文字版 出版社: Packt ...
在IT行业中,转换文档格式是一项常见的任务,尤其在办公环境中,Word文档(.doc或.docx)和PDF(Portable Document Format)文件之间的转换是必不可少的。本文将详细讲解如何使用OpenOffice将Word文档转换为PDF格式...
word转PDF 工具jar包;word模板填充字段有点小脾气,字段 需要带前后空格,或者分号/回车符结尾;不然会替换不了(你将模板转为xml文件,打开就知道原因了,可能将你的字段拆开或者加%空格之类的,需要自己main方法...
结合这些信息,我们可以推断 BrigBio.NewsCore.gae5SGI 可能是一个基于Web的生物信息学应用,其主要功能可能包括: 1. **数据收集**:系统可能从各种来源收集生物医学相关的新闻数据,如科学期刊、新闻网站、科研...
标题中的"fr.opensagres.poi.xwpf.converter.7z"是一个压缩包文件,其中包含了两个与Apache POI相关的库,这些库主要用于处理WordprocessingML(.docx)文档,并将其转换为PDF格式。Apache POI是Java领域的一个著名...
总结起来,使用Django框架在GAE上构建Web应用需要对两者的特性有深入理解,包括Django的MVT架构、GAE的数据存储机制、以及如何在GAE的环境中配置和部署Django应用。通过阅读指定的博客文章和分析提供的源代码,你...
标题"PursueOnline.MediaCouncil.gaE7FT2"和描述中的信息看似是某种特定项目或服务的标识,但没有提供具体的技术细节。然而,标签"HTML"表明我们可能在讨论与超文本标记语言(HTML)相关的内容。HTML是网页设计的...
安装后,开发者可以通过 `dev_appserver.py` 运行本地开发服务器,`appcfg.py` 用于应用的上传和发布。 3. **Hello World**: 开发 GAE 应用遵循 CGI 标准,通过处理 HTTP 请求(GET 或 POST)来生成响应。在 GAE ...
标题 "gwt-gae-channel: 自动从code.google.compgwt-gae-channel导出" 提供的信息表明,这是一个与Google Web Toolkit (GWT) 和 Google App Engine (GAE) 相关的项目,特别是关于GAE的Channel API的客户端绑定。...
而“客户端加服务端中localproxy中的proxy.py”可能是一个本地代理脚本,用于在本地开发环境和服务端之间建立通信,这对于调试和测试GAE应用非常有用。 标签 "GAE 免配置" 强调了该压缩包的便捷性。对于初学者或者...
1. `model.py`: 包含GAE和VGAE的定义。 2. `dataset.py`: 数据集的加载和预处理,如图的构建、特征提取等。 3. `train.py`: 训练脚本,包括模型实例化、优化器设置、训练循环等。 4. `test.py`: 测试脚本,用于评估...
GAE是Google提供的一个云计算平台,允许开发者在Google的基础设施上部署和运行Web应用,提供了包括计算、存储、数据库等在内的多种服务。 首先,Google App Engine(GAE)是Google推出的一个PaaS(Platform as a ...
2. **配置文件**:如app.yaml(GAE的应用配置文件),settings.py(Django项目的配置文件)。 3. **数据库迁移文件**:用于版本控制数据库结构的变化。 4. **静态文件**:包括CSS、JavaScript和图片资源。 5. **测试...
4. 使用GAE SDK提供的工具,如`appcfg.py`,按照官方文档的指导将应用上传到你的GAE空间。 **总结** Google App Engine为开发者提供了一种便捷、免费(在一定范围内)的Web应用程序托管解决方案。通过简单的步骤,...