【问题标题】:Reduce Two Functions to a Single Function. Flask将两个函数简化为一个函数。烧瓶
【发布时间】:2021-07-13 10:08:31
【问题描述】:

我正在开发一个模块,以使用 Flask 在已读和未读消息之间切换。我有一个按钮,可以在阅读和未读我已实现的消息之间切换。但是我已经尝试编写将其作为单个函数处理的方法,但我没有成功

这是两条路线:

我将省略路由线

def read(msg_id):
    msg = Messages.query.filter_by(id=msg_id).first()

    msg.status = True
    db.session.commit()

    return redirect(redirect_url())

def unread(msg_id):
    msg = Messages.query.filter_by(id=msg_id).first()

    msg.status = False
    db.session.commit()
    
    return redirect(redirect_url())

消息默认为False,表示未读消息。

然后在我的模板上,我这样做;

                {% if msg.status == False %}
                <th scope="row"> <i class="bi bi-bell-fill text-danger"></i> </th>
                {% else %}
                <th scope="row"> <i class="bi bi-check2-circle text-success"></i> </th>
                {% endif %}

如何将以上两个函数重写为一个?

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy


    【解决方案1】:

    你想切换状态,所以设置它不是的值。

    def toggle_read(msg_id):
        msg = Messages.query.filter_by(id=msg_id).first()
    
        msg.status = not msg.status
        db.session.commit()
        
        return redirect(redirect_url())
    

    但是,在实践中,如果 UI 在两个选项卡中打开,或者有两个人在查看状态,或者存在网络错误,这可能会导致 UI 混乱。这是因为toggle 不是幂等的(幂等应用两次与应用一次相同)。

    另一种选择是为新状态获取参数:

    def set_read(msg_id, status):
        msg = Messages.query.filter_by(id=msg_id).first()
    
        msg.status = status == "True"
        db.session.commit()
        
        return redirect(redirect_url())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多