Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Share data across Flask view functions

Tags:

python

flask

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)
    
like image 659
Joseph Avatar asked Jul 05 '16 00:07

Joseph


People also ask

How do you pass data between Flask routes?

How do I share data between requests? and Store large data or a service connection per Flask session. Show activity on this post. The link to route /b in the template for /a could have query parameters added to it, which you could read in the route for /b .

How does the view function pass entries in Flask?

A view function is the code you write to respond to requests to your application. Flask uses patterns to match the incoming request URL to the view that should handle it. The view returns data that Flask turns into an outgoing response.


1 Answers

I believe what you are looking for is the application local g. According to the documentation

Just store on this whatever you want.

It meets your needs here exactly.

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)
like image 88
dirn Avatar answered Oct 02 '22 16:10

dirn