`
fighter1945
  • 浏览: 229084 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

web.py笔记gae的session总结

 
阅读更多

这几天利用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官方的呢,后来才发现是中间件

 

 

 

分享到:
评论

相关推荐

    Python库 | appfy.recipe.gae-0.7.1.zip

    这个库是专门为Google App Engine (GAE)开发的,GAE是一个云服务平台,允许开发者构建和运行Web应用程序。`appfy.recipe.gae`库是使用Buildout工具来管理和配置GAE项目的一部分。 描述中提到的"python库。资源全名...

    web.py cookbook

    这是webpy.org官网webpy cookbook的离线版.由于官网没有提供离线版所以学习起来很不方便.故本人做了个离线版的cookbook,并且每个文件都重新编辑,花了一整个下午,为了方便更多人使用,故传上来和大家共享.祝大家学习...

    Google.App.Engine.Java.and.GWT.Application.Develop_GAE

    基于Google.App.Engine(GAE)的Java和GWT应用开发

    基于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:App Engine 开发的构建方法

    appfy.recipe.gae appfy.recipe.gae 提供了一系列配方来帮助开发。 它的灵感来自于 ,但使用了不同的布局和扩展的功能。 它也分为不同的食谱。 目前 appfy.recipe.gae 有 3 个食谱: appfy.recipe.gae:app_lib: 从 ...

    word转pdf 支持docx doc

    在IT行业中,转换文档格式是一项常见的任务,尤其在办公环境中,Word文档(.doc或.docx)和PDF(Portable Document Format)文件之间的转换是必不可少的。本文将详细讲解如何使用OpenOffice将Word文档转换为PDF格式...

    基于Google.App.Engine(GAE)的Java和GWT应用开发.pdf

    中文名: 基于Google App Engine(GAE)的Java和GWT应用开发 原名: Google App Engine Java and GWT Application Development 作者: Daniel Guermeur, Amy Unruh 资源格式: PDF 版本: 文字版 出版社: Packt ...

    fr.opensagres.poi.xwpf.converter.pdf-2.0.2.jar

    word转PDF 工具jar包;word模板填充字段有点小脾气,字段 需要带前后空格,或者分号/回车符结尾;不然会替换不了(你将模板转为xml文件,打开就知道原因了,可能将你的字段拆开或者加%空格之类的,需要自己main方法...

    BrigBio.NewsCore.gae5SGI

    结合这些信息,我们可以推断 BrigBio.NewsCore.gae5SGI 可能是一个基于Web的生物信息学应用,其主要功能可能包括: 1. **数据收集**:系统可能从各种来源收集生物医学相关的新闻数据,如科学期刊、新闻网站、科研...

    fr.opensagres.poi.xwpf.converter.7z

    标题中的"fr.opensagres.poi.xwpf.converter.7z"是一个压缩包文件,其中包含了两个与Apache POI相关的库,这些库主要用于处理WordprocessingML(.docx)文档,并将其转换为PDF格式。Apache POI是Java领域的一个著名...

    如何在GAE中轻松使用Django框架

    总结起来,使用Django框架在GAE上构建Web应用需要对两者的特性有深入理解,包括Django的MVT架构、GAE的数据存储机制、以及如何在GAE的环境中配置和部署Django应用。通过阅读指定的博客文章和分析提供的源代码,你...

    PursueOnline.MediaCouncil.gaE7FT2

    标题"PursueOnline.MediaCouncil.gaE7FT2"和描述中的信息看似是某种特定项目或服务的标识,但没有提供具体的技术细节。然而,标签"HTML"表明我们可能在讨论与超文本标记语言(HTML)相关的内容。HTML是网页设计的...

    GAE入门教程.docx

    安装后,开发者可以通过 `dev_appserver.py` 运行本地开发服务器,`appcfg.py` 用于应用的上传和发布。 3. **Hello World**: 开发 GAE 应用遵循 CGI 标准,通过处理 HTTP 请求(GET 或 POST)来生成响应。在 GAE ...

    gwt-gae-channel:自动从code.google.compgwt-gae-channel导出

    标题 "gwt-gae-channel: 自动从code.google.compgwt-gae-channel导出" 提供的信息表明,这是一个与Google Web Toolkit (GWT) 和 Google App Engine (GAE) 相关的项目,特别是关于GAE的Channel API的客户端绑定。...

    GAE包(以配置好,解压可用)

    而“客户端加服务端中localproxy中的proxy.py”可能是一个本地代理脚本,用于在本地开发环境和服务端之间建立通信,这对于调试和测试GAE应用非常有用。 标签 "GAE 免配置" 强调了该压缩包的便捷性。对于初学者或者...

    gae_in_pytorch-master_GAE_

    1. `model.py`: 包含GAE和VGAE的定义。 2. `dataset.py`: 数据集的加载和预处理,如图的构建、特征提取等。 3. `train.py`: 训练脚本,包括模型实例化、优化器设置、训练循环等。 4. `test.py`: 测试脚本,用于评估...

    基于GAE的Demo

    GAE是Google提供的一个云计算平台,允许开发者在Google的基础设施上部署和运行Web应用,提供了包括计算、存储、数据库等在内的多种服务。 首先,Google App Engine(GAE)是Google推出的一个PaaS(Platform as a ...

    小学期GAE项目 python+Django框架实现的博客

    2. **配置文件**:如app.yaml(GAE的应用配置文件),settings.py(Django项目的配置文件)。 3. **数据库迁移文件**:用于版本控制数据库结构的变化。 4. **静态文件**:包括CSS、JavaScript和图片资源。 5. **测试...

    GAE基本建设教程.doc

    4. 使用GAE SDK提供的工具,如`appcfg.py`,按照官方文档的指导将应用上传到你的GAE空间。 **总结** Google App Engine为开发者提供了一种便捷、免费(在一定范围内)的Web应用程序托管解决方案。通过简单的步骤,...

Global site tag (gtag.js) - Google Analytics