在Flask视图函数之间共享数据

时间:2016-07-05 00:53:00

标签: python flask

我正在使用Flask构建一个非常小的单页动态网站。我想在不使用类的情况下在函数之间共享变量及其值的列表。

我查看了Flask的View类,但是我觉得我的应用程序不够大,也不够复杂,无法使用Flask实现我的项目的基于类的版本。如果我正确陈述,我也将失去使用route装饰器的能力,并且必须使用其代理函数add_url_rule

这也会迫使我将我的代码重构为像这样的东西:

from flask.views import View
class ShowUsers(View):

def dispatch_request(self):
    users = User.query.all()
    return render_template('users.html', objects=users)

app.add_url_rule('/users/', view_func=ShowUsers.as_view('show_users'))

对于变量共享,我想到了两种技术。

  1. x = ""
    
    def foo():
        global x
        x = request.form["fizz"]
    
    def bar():
        # do something with x (readable)
        print(x)
    
    def baz():
        return someMadeupFunction(x)
    
  2. def foo():
        x = request.form["fizz"]
        qux(someValue)
    
    def qux(i):
        menu = {
        key0: bar,
        key1: baz,
        }
        menu[i](x)
    
    def bar(x):
        # do something with x (readable)
        print(x)
    
    def baz(x):
        return someMadeupFunction(x)
    

1 个答案:

答案 0 :(得分:6)

我相信你要找的是application local g。根据文件

  

只要存储在你想要的任何东西上。

这完全符合您的需求。

from flask import g

def foo():
    g.x = request.form["fizz"]

def bar():
    # do something with x (readable)
    print(g.x)

def baz():
    return someMadeupFunction(g.x)