Web.pyのSAEクラウドでのSessionの使用問題の解決

3573 ワード

この間ずっとSAEでPythonを使ってみたかったのですが、一応Web.pyフレームワークを開発フレームワークとして選びましたが、かわいそうSAEの資料が少ないのがかわいそうで、ちょっと問題があって基本的に解決できません.今日はSessionのストレージ問題を解決します.SAEではローカルファイルで直接保存できません.権限のせいのようですが、私が今採用しているのはmysqlに保存することです.効果もいいですね.皆さんに役に立つことを願っています.直接コードをつけました.
index.wsgi
#!/usr/bin/env python
# coding: utf-8
import os
import web
import sae
from config.url import urls
from config import settings

#        
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/env python
# 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/env python
# coding: utf-8
import web
import sae.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='[email protected]',
    site_name = '    ',
    site_desc = '',
    static = '/static',
)

web.template.Template.globals['config'] = config
web.template.Template.globals['render'] = render

login.py
#!/usr/bin/env python
# coding: utf-8
import web
from config import settings
render = settings.render
def myloadhook():
    global session
    session = web.config._session
class LoginUser:
    def GET(self):
        return render.LoginUser()
class CheckUser:
    def POST(self):
        #  Session    
        myloadhook()
        #      
        i = web.input()
        username =i.get('txtUserName',None)
        password=i.get('txtUserPass',None)
        #          session
        session = web.config._session
        if username == 'chu888' and password == 'chu888':
            session.access_token = 'true'
            raise web.seeother('/')
        else:
            session.access_token = 'false'
            raise web.seeother('/todo/login')