Joseph Joseph - 5 months ago 19
Python Question

Share data across Flask view functions

I am using Flask to build a very small one-page dynamic website. I want to share a list of variables and their values across functions without using a class.

I looked into Flask's

View
class, however I feel as if my application isn't large enough nor complex enough to implement a class-based version of my project using Flask. If I'm stating correctly I would also lose the ability to use the
route
decorator and would have to use its surrogate function
add_url_rule
.

Which would also force me to refactor my code into something such as this:

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'))


For variable sharing I thought of two techniques.


  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)


Answer

I normally just add them as methods to app as in app.x = request.form["fizz"]. All of your routes should have access to this as long as your app declaration above the route definitions.