Python 是否有更有效的方法为每个视图设置会话变量?

Python 是否有更有效的方法为每个视图设置会话变量?,python,flask,Python,Flask,我对烧瓶不熟悉。我有相当多的视图采用参数,比如。我希望将存储在会话变量中,而不必对每个视图都这样做。可能吗 @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

我对烧瓶不熟悉。我有相当多的视图采用参数,比如
。我希望将
存储在会话变量中,而不必对每个视图都这样做。可能吗

@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 ...
@app.route('/home/',默认值={'name':None})
@app.route(“/home/”)
定义名称():
会话['name']=名称
返回。。。
@app.route(“/other/”,默认值={'name':None})
@app.route(“/other/”)
定义名称():
会话['name']=名称#重复
返回。。。

据我所知,您将
名称
作为视图参数。因此,在本例中,您可以编写自己的decorator:

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不够熟悉,无法提供一个“真实”的答案:我也是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)