Python 烧瓶中的全局级变量操作
我正在用python运行一个flask应用程序,以提供一个GUI来操作JSON字典并用JSON模式验证它 保存字典以便在不同请求中更改和保存它的最佳方法是什么。我的用户将在本地运行此文件,因此多个用户同时编辑此文件时不应出现任何并发问题。我计划为JSON字典提供一个全局级别的变量,并在用户发出POST请求后运行一个函数来更改它,然后像这样将其保存在内存中,直到我完成并将其保存到文本文件中。这是合理的方法吗?或者,我是否应该在每次发生更改时全局保存它并将其保存到文件中,然后在下次需要编辑它时将其拉回Python 烧瓶中的全局级变量操作,python,flask,global-variables,Python,Flask,Global Variables,我正在用python运行一个flask应用程序,以提供一个GUI来操作JSON字典并用JSON模式验证它 保存字典以便在不同请求中更改和保存它的最佳方法是什么。我的用户将在本地运行此文件,因此多个用户同时编辑此文件时不应出现任何并发问题。我计划为JSON字典提供一个全局级别的变量,并在用户发出POST请求后运行一个函数来更改它,然后像这样将其保存在内存中,直到我完成并将其保存到文本文件中。这是合理的方法吗?或者,我是否应该在每次发生更改时全局保存它并将其保存到文件中,然后在下次需要编辑它时将其拉
有没有其他更合理的方法?我不希望使用任何类型的数据库,因为JSON只是一种文本格式,所以在用户完成后将其保存到一个文件中,然后就可以下次使用了,这要简单得多。您可能会觉得很有帮助。它可以满足您的要求,尽管它是一个数据库,但没有任何东西可以阻止您将它变成一个字符串数据库,其中每个字符串都是一个完整的JSON文件。与全局字典相比,它的主要优势是跨会话的持久性,这意味着您不必将任何内容保存到文本文件中。老实说,MongoDB实例的设置非常简单,我认为它超过了“仅一个文本文件”所带来的便利。 如果我在我的机器上这样做,我会将它作为两个docker容器(app和db)运行,并用docker compose启动它。但是,如果您打算在其他人的机器上安装mongo,考虑到不同的操作系统和所有的操作系统,单独安装mongo可能会更容易 在运行mongo的情况下,只需编写一个简单的mongo连接器(我在最近的一个项目中使用了一个非常简单的示例,不是最干净的,但它显示了要点):
from pymongo import MongoClient
class DB:
def __init__(self):
self.client = MongoClient('localhost', 27017)
self.db = self.client.email_db
def save_email(self, email):
if not self.email_exists(email):
self.insert(email)
return True
else:
print('email already stored.')
return False
def insert(self, email):
try:
collection = self.db.emails
collection.insert(email.to_dict())
except Exception as e:
print('An error occurred when inserting email: {}'.format(email.hash), e)
def email_exists(self, email):
query = {
'hash': email.hash,
}
try:
collection = self.db.emails
cursor = collection.find(query)
return cursor.count() > 0
except Exception:
print('Could not query db for email: {}'.format(email.hash))
return False