我是烧瓶的新手。我有很多关于参数的观点,比如<name>
。我想将<name>
存储在会话变量中,而不必为每个视图执行此操作。这可能吗?
@app.route('/home/',defaults={'name':None})
@app.route('/home/<name>/')
def name():
session['name'] = name
return ...
@app.route('/another/',defaults={'name':None})
@app.route('/another/<name>/')
def name():
session['name'] = name # repetitive
return ...
答案 0 :(得分:1)
据我了解,您将name
视为参数。所以在这种情况下你可以编写自己的装饰器:
def set_session(fn):
@functools.wraps(fn)
def wrapper(name, *args, **kwargs):
session['name'] = name
return fn(name, *args, **kwargs)
return wrapper
@app.route('/home/',defaults={'name':None})
@app.route('/home/<name>/')
@set_session
def name(name):
return ...
您还可以更新Flask
视图:
class MyApp(Flask):
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
if (view_func is not None):
view_func = set_session(view_func)
return super(MyApp, self).add_url_rule(rule, endpoint,
view_func, **options)
可能最好的解决方案是使用可插入的视图:http://flask.pocoo.org/docs/views/。如果你有几个装饰器,它会更有用。