簡體   English   中英

燒瓶中的全局水平變量操作

[英]Global Level Variable Manipulation in Flask

我正在python中運行flask應用程序,作為提供用於處理JSON字典並使用JSON模式進行驗證的GUI的方式。

保存字典以使其能夠在不同請求中進行更改並保存的最佳方法是什么。 我的用戶將在本地運行它,因此多個用戶同時編輯它不會有任何並發​​問題。 我打算為JSON字典設置一個全局級別的變量,並在用戶發出POST請求以對其進行更改后將其運行,然后像這樣將其保留在內存中,直到完成並保存到文本文件后,再運行一個函數。 這是合理的方法嗎? 還是應該不全局保存它,而每次進行更改時都將其保存到文件中,然后在下次我需要對其進行編輯時將其重新備份?

還有另一種方法可以在燒瓶中更合理嗎? 我不希望使用任何類型的數據庫,因為JSON只是一種文本格式,因此在用戶完成操作后將其保存到文件中,然后可以在下一次使用時要簡單得多。

老實說,MongoDB實例的設置是如此簡單,以至於我認為它勝過“僅文本文件”所帶來的便利。 如果在我的機器上執行此操作,則將其作為兩個docker容器(應用程序和數據庫)運行,並使用docker compose啟動它。 但是,如果要在其他人的計算機上進行安裝,考慮到不同的操作系統以及所有操作系統,單獨安裝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

您可能會發現此鏈接很有幫助。 它可以滿足您的要求(盡管是作為數據庫),但是沒有什么可以阻止您將其變成字符串數據庫,其中每個字符串都是一個完整的JSON文件。 與全局字典相比,主要優點是跨會話的持久性,這意味着您無需將任何內容保存到文本文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM