在 Flask 中存储和访问字典数据
Storing and accessing dictionary data in Flask
我有一个 Flask RESTful 服务,我想在初始化期间将 JSON 文件作为字典读取,然后在某些 GET 请求期间从中读取数据。词典必须每天更新一次。
这是我尝试使用 Flask 全局变量 -
app.py
import json
from flask import Flask
from flask import g
from api import api
def create_app(config_file='settings.py'):
app = Flask(__name__)
app.config.from_pyfile(config_file)
api.init_app(app)
with app.app_context():
f = open('data.json')
g.data = json.loads(f.read())
return app
app = create_app()
feat_api.py
from flask_restplus import Resource, reqparse, fields, Model
from flask import g
from extensions.restplus import api
ns = api.namespace('feat', description='Feature')
parser = reqparse.RequestParser()
parser.add_argument('id', type=str, required=True)
@ns.route('/')
class Feature(Resource):
@api.expect(parser)
def get(self):
args = parser.parse_args()
return {"data": g.data[args['id']]}
我在进行 API 调用时收到以下错误 - AttributeError: '_AppCtxGlobals' object has no attribute 'data'
。
最简单的方法是将词典保存为 pickle 文件,并在每次需要时加载它:
import pickle
a = {'hello': 'world'}
with open('filename.pickle', 'wb') as handle:
pickle.dump(a, handle)
with open('filename.pickle', 'rb') as handle:
b = pickle.load(handle)
更新:
或者,您可以像创建应用程序时那样保存它,并在每次更新时保存变量:
def create_app(config_file='settings.py'):
app = Flask(__name__)
app.config.from_pyfile(config_file)
api.init_app(app)
with app.app_context():
f = open('data.json')
app.config['data'] = json.loads(f.read())
return app
feat_api.py
import current_app
@ns.route('/')
class Feature(Resource):
@api.expect(parser)
def get(self):
args = parser.parse_args()
return {"data": current_app.config['data']}
我有一个 Flask RESTful 服务,我想在初始化期间将 JSON 文件作为字典读取,然后在某些 GET 请求期间从中读取数据。词典必须每天更新一次。
这是我尝试使用 Flask 全局变量 -
app.py
import json
from flask import Flask
from flask import g
from api import api
def create_app(config_file='settings.py'):
app = Flask(__name__)
app.config.from_pyfile(config_file)
api.init_app(app)
with app.app_context():
f = open('data.json')
g.data = json.loads(f.read())
return app
app = create_app()
feat_api.py
from flask_restplus import Resource, reqparse, fields, Model
from flask import g
from extensions.restplus import api
ns = api.namespace('feat', description='Feature')
parser = reqparse.RequestParser()
parser.add_argument('id', type=str, required=True)
@ns.route('/')
class Feature(Resource):
@api.expect(parser)
def get(self):
args = parser.parse_args()
return {"data": g.data[args['id']]}
我在进行 API 调用时收到以下错误 - AttributeError: '_AppCtxGlobals' object has no attribute 'data'
。
最简单的方法是将词典保存为 pickle 文件,并在每次需要时加载它:
import pickle
a = {'hello': 'world'}
with open('filename.pickle', 'wb') as handle:
pickle.dump(a, handle)
with open('filename.pickle', 'rb') as handle:
b = pickle.load(handle)
更新:
或者,您可以像创建应用程序时那样保存它,并在每次更新时保存变量:
def create_app(config_file='settings.py'):
app = Flask(__name__)
app.config.from_pyfile(config_file)
api.init_app(app)
with app.app_context():
f = open('data.json')
app.config['data'] = json.loads(f.read())
return app
feat_api.py
import current_app
@ns.route('/')
class Feature(Resource):
@api.expect(parser)
def get(self):
args = parser.parse_args()
return {"data": current_app.config['data']}