私のビュー、モデル、およびURLはモジュールに格納されており、セッションストアが設定されている私のapp.pyによってインポートされます。私は - 私はここにhttp://webpy.org/cookbook/sessions_with_subappを説明したガイドラインに従うことにより、セッション変数を設定することができますが、私がこの例外web.ctx.sessionを使用しているときにweb.pyセッションにアクセスできない
AttributeError: 'ThreadedDict' object has no attribute 'session'
が、これは私のapp.pyで取得しています一度私は私のセッションの値にアクセスすることはできません、私のビューを使用シャルムここ
from livereload import Server
import web
from nestpas.views import *
from nestpas.urls import *
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
app = web.application(urls, globals())
webapp = app.wsgifunc()
# Setup session storage
db = web.database(dbn='sqlite', db='dev.db')
store = web.session.DBStore(db, 'sessions')
session = web.session.Session(app, store,
initializer={'auth': 0}
)
def session_hook():
web.ctx.session = session
app.add_processor(web.loadhook(session_hook))
if __name__ == '__main__':
static_app = web.httpserver.StaticMiddleware(webapp)
server = Server(static_app)
server.watch('static/', 'templates/', 'nestpas/')
server.serve(port=8080, host='localhost')
のように動作し、開発プロセスを簡素化するためにlivereloadを使用して、mは、私がここで
class Login:
def GET(self):
""" Login """
render = web.template.render(base="admin")
return render.login({})
def POST(self):
""" Handle login """
inp = web.input()
if 'user_mail' in inp and 'user_pwd' in inp:
try:
user = User.get(
User.mail == inp.user_mail,
User.password == inp.user_pwd
)
logging.info("Login by user {}".format(user.id))
web.ctx.session.auth = 1
logging.warn(web.ctx.session.auth) # Shows the value
raise web.seeother("/admin/")
except DoesNotExist:
logging.warning("Login attempt")
raise web.seeother("/login/")
else:
raise web.seeother("/login/")
をセッション値を設定する方法です私はACCEにしようとする方法であります
def authenticate(klass):
logging.warn("- hello Kitty {}".format(
web.ctx.session.auth
))
return klass
@authenticate
class Admin:
def GET(self):
""" Admin """
posts = BlogPost.select().order_by(
BlogPost.when_created.desc()
).paginate(0, 10)
render = web.template.render(base="admin")
return render.latest({
"user_mail": "Kitty",
"blog_posts": posts
})
SSがセッションの値Iはまたweb.ctx.session.get()とweb.ctx.session [ 'AUTH']とweb.ctx [ 'セッション']が、それらの作業のどれを試し。
web.pyを搭載したMac上のイム== 0.40.dev0
ああ、私はクラスデコレータを使ってやりたいと思っていました。代わりにデコレータ? –
はい、メソッドデコレータ。 – pbuck