【问题标题】:Flask signals: why is it not ok to modify data on signal?烧瓶信号:为什么不能修改信号数据?
【发布时间】:2014-08-24 12:53:49
【问题描述】:

Flask 文档说:

还请注意,信号旨在通知订阅者和 不应鼓励订阅者修改数据

我想知道,为什么会这样?

我正在使用 Flask-User 库,我想在用户注册时为用户设置一些默认字段(例如,将显示名称设置为用户名),然后更新数据库。 Flask-User 在用户注册时发送user_registered 信号。为什么订阅信号并更新其中的 db 不是一个好主意?

【问题讨论】:

  • 我认为这句话是指不修改信号数据,而不是任何其他数据(如数据库等)。
  • 这是个好问题。阅读了blinker 文档后,我没有看到任何关于数据修改的内容。

标签: python flask blinker


【解决方案1】:

这是全面解决方案。我想我是强大的 Drupal/PHP 开发人员。直到第 7 个版本,一切都是使用钩子构建的 - 信号(Flask)。当一切都建立在钩子上时,项目变得一团糟。这是一个快速但危险的过程。信号被设计用作观察者模式,它喜欢事件。这是主要思想。但是当我们能够更新上下文时,主题。它喜欢连锁责任。主要问题是链条。因此,如果一项失败,其他项就会收到错误的状态。这是主要问题。有时很难找到失败的罪魁祸首。因为我们有来自不同主题的不同信号,所以这些改变了共同的范围。

您几乎可以在任何地方进行扩展,但您不应该更改数据。要扩展权利,您应该使用干净的 OOP 解决方案。

有时我们需要改变一些逻辑。所以我们需要定义一个篮子我们需要改变什么。在 Drupal 8 中,我们使用依赖注入容器 - 服务。服务在单独的文件中描述。所以我们可以改变关系和注入。

有一个有趣的图书馆 - https://pypi.python.org/pypi/Flask-Injector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多