第一次提问。
我目前正在努力如何正确使用烧杯瓶微框架。下面是有问题的程序:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# filename: server.py
import bottle as app
from beaker.middleware import SessionMiddleware
session_options = {
'session.type': 'file',
'session.data_dir': './session/',
'session.auto': True,
}
app_middlware = SessionMiddleware(app.app(), session_options)
app_session = app.request.environ.get('beaker.session')
@app.route('/login')
def login():
app_session = app.request.environ.get('beaker.session')
app_session['logged_in'] = True
@app.route('/logout')
def logout():
app_session = app.request.environ.get('beaker.session')
if app_session.get('logged_in'):
app_session['logged_in'] = False
return 'You are logged out'
app.redirect('/login')
@app.route('/dashboard')
def dashboard():
app_session = app.request.environ.get('beaker.session')
if app_session.get('logged_in'):
return 'You are logged in'
app.redirect('/login')
app.debug(True)
app.run(app=app_middlware, reloader=True)
如果您注意到了,我会继续在每个def
块上调用app_session = app.request.environ.get('beaker.session')
,这样它就不会返回类似于TypeError: 'NoneType' object does not support item assignment
这样的错误——看起来Python无法识别函数之外的变量(如果我错了,请纠正我)。
以下是问题:
app_session = app.request.environ.get('beaker.session')
实例,那么它可以对每个def
块都可用(我真的需要一个实例,因为它是要检查和使用的同一个会话)。app_session
的单个实例?类似于:
@app.route('/<path:re:(login|dashboard|logout)\/?>')
def url(path):
app_session = app.request.environ.get('beaker.session')
if 'login' in path:
app_session['logged_in'] = True
elif 'logout' in path:
if app_session.get('logged_in'):
# app_session.delete() it doesn't seem to work?
app_session['logged_in'] = False
return 'You are logged out'
app.redirect('/login')
elif 'dashboard' in path:
if app_session.get('logged_in'):
return 'You are logged in'
app.redirect('/login')
在
bottle
应用程序中使用beaker
很容易。首先,设置瓶子应用程序:之后:
有了这个,每次您收到请求时,您的烧杯会话将作为
request.environ['beaker_session']
。为了方便我通常会这样做:这安排在处理任何请求之前运行
setup_request
;我们使用的是bottle.request
变量(请参阅前面的import语句),它是一个包含当前请求信息的线程局部变量。从这一点上讲,只要我需要,我就可以引用request.session
,例如:相关问题 更多 >
编程相关推荐