将两个函数缩减为一个函数。烧瓶
Reduce Two Functions to a Single Function. Flask
我正在开发一个使用 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 %}
如何将以上两个函数重写为一个?
您想切换状态,因此将其设置为不是的值。
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 混淆。这是因为 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())
我正在开发一个使用 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 %}
如何将以上两个函数重写为一个?
您想切换状态,因此将其设置为不是的值。
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 混淆。这是因为 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())