I'm using Flask to expose some data-crunching code as a web service. I'd like to have some class variables that my Flask functions can access.
Let me walk you through where I'm stuck:
from flask import Flask
app = Flask(__name__)
class MyServer:
def __init__(self):
globalData = json.load(filename)
@app.route('/getSomeData')
def getSomeData():
return random.choice(globalData) #select some random data to return
if __name__ == "__main__":
app.run(host='0.0.0.0')
When I run getSomeData()
outside of Flask, it works fine. But, when I run this with Flask, I get 500 internal server error
. There's no magic here, and Flask has no idea that it's supposed to initialize a MyServer
object. How can I feed an instance of MyServer to the app.run()
command?
I could admit defeat and put globalData
into a database instead. But, is there an other way?
You can create an instance of MyServer
just outside the scope of your endpoints and access its attributes. This worked for me:
class MyServer:
def __init__(self):
self.globalData = "hello"
from flask import Flask
app = Flask(__name__)
my_server = MyServer()
@app.route("/getSomeData")
def getSomeData():
return my_server.globalData
if __name__ == "__main__":
app.run(host="0.0.0.0")