如何定义“静态”类来读取 Flask 应用程序中的反馈消息?

Posted

技术标签:

【中文标题】如何定义“静态”类来读取 Flask 应用程序中的反馈消息?【英文标题】:How to define "static" class to read feedback messages in Flask application? 【发布时间】:2022-01-19 10:02:12 【问题描述】:

我们正在实现一个 Flask 应用程序。 我们将有用于反馈消息的 json 文件 - 带有键 - 值对(键将是一些常量,值将是实际消息,然后在运行时将读取并显示实际消息。 我想定义一个类,它在应用程序开始时读取 json 文件,以及一个方法,它根据键返回实际消息。 我实现了以下内容:

import json

class FeedbackMessagesReader:
    
    @staticmethod
    def read_feedback_config():
        with open ("feedback_messages_json") as file:
            return json.load(file)

    @staticmethod  
    def get_feedback_message(key : str) -> str:
        return config[key]

from feedback_messages_reader import FeedbackMessagesReader

config = FeedbackMessagesReader.read_feedback_config()

在 feedback_messages_reader.py 中,但我不知道这是否正确以及在多大程度上是正确的,并且是最好的方法。 我也在类的末尾定义了“配置”,因为如果我把它放在开头(像这样)

import json

from feedback_messages_reader import FeedbackMessagesReader

config = FeedbackMessagesReader.read_feedback_config()
class FeedbackMessagesReader:
    
    @staticmethod
    def read_feedback_config():
        with open ("feedback_messages_json") as file:
            return json.load(file)

    @staticmethod  
    def get_feedback_message(key : str) -> str:
        return config[key]

我收到错误“类已定义第 3 行”

所以我想获得建议,这是实现这一点的最佳方法?

【问题讨论】:

【参考方案1】:

为什么您希望这些方法是静态的?我不明白。顺便说一句,“config”是烧瓶中的保留字,也许这就是你的问题。对于这个特定问题,更好的解决方案可能是使用常规方法,然后从中实例化一个对象。像下面这样:

import json   

class FeedbackMessagesReader:
    feedbacks = None
    
    def __init__(self):
        self.read_feedback_config()
    
    
    def read_feedback_config(self):
        with open ("feedback.json") as file:
            self.feedbacks = json.load(file)
 
    def get_feedback_message(self, key : str) -> str:
        return self.feedbacks[key]

feeds = FeedbackMessagesReader()
print(feeds.get_feedback_message("name"))

对于以下feedback.json:


"name": "John Doe",
"age": 120

输出是John Doe

【讨论】:

尊敬的 Mohsen,非常感谢您的反馈。我将在很多类中使用 get_feedback_message() 方法。这就是为什么如果我在每个类中放入这种代码:feeds = FeedbackMessagesReader() print(feeds.get_feedback_message("name")) 每次读取“feedback.json”文件时。而且我不想这样做 - 我希望文件只被读取一次并将其放入静态类变量中。此外,我将变量的名称从“config”更改为其他名称,问题仍然存在。 @Ivajlo Iliev 假设您在应用程序或应用程序工厂中实例化 feeds = FeedbackMessagesReader()。然后你可以在你的其他文件和类中调用它,比如from app import feeds

以上是关于如何定义“静态”类来读取 Flask 应用程序中的反馈消息?的主要内容,如果未能解决你的问题,请参考以下文章

Flask系列自定义Form组件

Flask 第十篇自定义Form组件

Flask学习第10篇:自定义Form组件

flask如何向前端传输GeoJson文件

网站后端_Python+Flask.0009.FLASK静态资源之默认及自定义资源目录?

读取properties文件中的内容