微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Flask中存储和访问字典数据

如何解决在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'

解决方法

最简单的方法是将字典另存为泡菜文件,并在每次需要时加载它:

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']}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?