加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 教程 > 正文

完整处理webpy框架在SAE上的文件方式保存session问题

发布时间:2021-12-11 10:18:53 所属栏目:教程 来源:互联网
导读:1,解决官方SAE样例代码中的误区 #app = web.application(urls, globals()).wsgifunc() app = web.application(urls, globals()) #application = sae.create_wsgi_app(app) application = sae.create_wsgi_app(app.wsgifunc()) 注释掉代码为官方提供的样例代码
1,解决官方SAE样例代码中的误区
 
#app = web.application(urls, globals()).wsgifunc()
app = web.application(urls, globals())
 
#application = sae.create_wsgi_app(app)
application = sae.create_wsgi_app(app.wsgifunc())
 
注释掉代码为官方提供的样例代码,但官方代码为了方便在APP实例化时直接调用了wsgifunc(),但这样会造成部分webpy属性的调用错误.如调用app.add_processor的失败.
 
2,设定全局session的调用
 
#增加session管理,将session放入全局的web.config
if web.config.get('_session') is None:
    shop_session = web.session.Session(app, DiskStore(session_root),
                        initializer={'login_shop_id':'NULL'})
    web.config._session = shop_session
else:
    shop_session = web.config._session
   
def session_hook():
    web.ctx.session = shop_session
   
app.add_processor(web.loadhook(session_hook))
 
3,解决sae环境中无法读写本地目录问题
 
SAE环境下python无法对本地目录进行读写操作,但sae提供了Storage,并且可以将Storage像本地磁盘一样挂载使用.所以添加如下代码:
 
monkey.patch_all()
session_root = '/s/session/'
 
注意:需要提前在sae中启用Storage,且添加"domain:session"以便具有权限.
 
4,解决SEA的Storage作为磁盘挂载后但不支持os.remove方法
 
"目前支持(patch)的文件系统接口函数为: open, os.listdir, os.mkdir, os.path.exists, os.path.isdir, os.open, os.fdopen, os.close, os.chmod, os.stat, os.unlink, os.rmdir"但webpy在DiskStore.cleanup方法却是调用的os.remove,需要改为os.unlink
 
#因新浪SAE的stroge不支持挂载为路径后的os.remove函数,故重新改在一下
class DiskStore(web.session.DiskStore):
    def __init__(self, root):
        web.session.DiskStore.__init__(self, root)
        # if the storage root doesn't exists, create it.
        self.root = root
   
    def cleanup(self, timeout):
        now = time.time()
        for f in os.listdir(self.root):
            path = self._get_path(f)
            atime = os.stat(path).st_atime
            if now - atime > timeout :
                os.unlink(path)#改写为unlink函数
 
OK,现在session已经可以正常使用了.

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读