web.py在SAE中的Session问题解决方法(使用mysql存储)
这段时间一直想尝试着在SAE中使用Python,初步选择了Web.py框架做为开发框架,但是可怜SAE上的资料少的可怜,有点问题基本上解决不了,今天解决一个Session在Session的存储问题,在SAE中不能直接用本地文件存储,好像是权限的原因,我现在采用的是保存在mysql中,效果也不错。希望对大家有帮助。直接上代码了。
index.wsgi
#!/usr/bin/envpython
#coding:utf-8
importos
importweb
importsae
fromconfig.urlimporturls
fromconfigimportsettings
#是否具有调试功能
web.config.debug=False
#app=web.application(urls,globals()).wsgifunc()
#application=sae.create_wsgi_app(app)
#解决Session在SAE中的问题
app=web.application(urls,globals())
#将session保存在数据库中
db=settings.db
store=web.session.DBStore(db,'sessions')
#session=web.session.Session(app,store,initializer={'access_token':'true'})
session=web.session.Session(app,store)
web.config._session=session
application=sae.create_wsgi_app(app.wsgifunc())
url.py
#!/usr/bin/envpython
#coding:utf-8
pre_fix='controllers.'
urls=(
'/',pre_fix+'todo.Index',
'/todo/new',pre_fix+'todo.New',
'/todo/(\d+)',pre_fix+'todo.View',
'/todo/(\d+)/edit',pre_fix+'todo.Edit',
'/todo/(\d+)/delete',pre_fix+'todo.Delete',
'/todo/(\d+)/finish',pre_fix+'todo.Finish',
'/todo/login',pre_fix+'login.LoginUser',
'/todo/checkuser',pre_fix+'login.CheckUser',
'/todo/reset',pre_fix+'todo.reset',
'/todo/saveupload','mycontrollers.saveupload.SaveUpload'
)
setting.py
#!/usr/bin/envpython
#coding:utf-8
importweb
importsae.const
#数据库设定
db=web.database(dbn='mysql',user=sae.const.MYSQL_USER,pw=sae.const.MYSQL_PASS,host=sae.const.MYSQL_HOST,port=3307,db=sae.const.MYSQL_DB)
#模板设定
render=web.template.render('templates/',cache=False)
config=web.storage(
email='oooo@qq.com<scriptcf-hash="f9e31"type="text/javascript">
/*<![CDATA[*/!function(){try{vart="currentScript"indocument?document.currentScript:function(){for(vart=document.getElementsByTagName("script"),e=t.length;e--;)if(t[e].getAttribute("cf-hash"))returnt[e]}();if(t&&t.previousSibling){vare,r,n,i,c=t.previousSibling,a=c.getAttribute("data-cfemail");if(a){for(e="",r=parseInt(a.substr(0,2),16),n=2;a.length-n;n+=2)i=parseInt(a.substr(n,2),16)^r,e+=String.fromCharCode(i);e=document.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/*]]>*/</script>',
site_name='任务跟踪',
site_desc='',
static='/static',
)
web.template.Template.globals['config']=config
web.template.Template.globals['render']=render
login.py
#!/usr/bin/envpython
#coding:utf-8
importweb
fromconfigimportsettings
render=settings.render
defmyloadhook():
globalsession
session=web.config._session
classLoginUser:
defGET(self):
returnrender.LoginUser()
classCheckUser:
defPOST(self):
#获取Session相关信息
myloadhook()
#获取表单信息
i=web.input()
username=i.get('txtUserName',None)
password=i.get('txtUserPass',None)
#从全局配置文件中得到session
session=web.config._session
ifusername=='chu888'andpassword=='chu888':
session.access_token='true'
raiseweb.seeother('/')
else:
session.access_token='false'
raiseweb.seeother('/todo/login')