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

Jos*_*eph 5 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'))
Run Code Online (Sandbox Code Playgroud)

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

  1. x = ""
    
    def foo():
        global x
        x = request.form["fizz"]
    
    def bar():
        # do something with x (readable)
        print(x)
    
    def baz():
        return someMadeupFunction(x)
    
    Run Code Online (Sandbox Code Playgroud)
  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)
    
    Run Code Online (Sandbox Code Playgroud)

dir*_*irn 6

我相信你要找的是当地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)
Run Code Online (Sandbox Code Playgroud)