如何使用Python龙卷风显示警告

时间:2016-10-11 08:31:22

标签: python tornado

有没有办法向用户显示警告并继续使用被调用函数?

我在龙卷风中找到的只是HTTPError。有这样的事情可以显示警告吗?

当前摘录:

if warning_bool:
    warning_text = "Warning! You can still continue though..."
    raise HTTPError(status_code=400, reason=warning_text)

put_function()

这会引发错误,并且不会调用该函数。

1 个答案:

答案 0 :(得分:1)

如果您想继续处理,则不希望出现错误。根据您的设置,这有很多效果。通常引发错误会将状态设置为200以外的值,这可能不是您想要的。它通常会触发您拥有的任何异常日志记录(在我们的例子中它会向sentry发送错误),它通常会自动回滚您的数据库事务。

如果您只是想向用户显示警告,因为他们做了某些事情" bad"但继续处理你会想要另一种机制。根据上下文,我有两种不同的处理方式。大多数情况下,我通过设置cookie并显示它,在下一页加载时自动显示消息(在发出警告的帖子之后)。根据应用程序的设置方式,对您有用的内容会有所不同。如果您的调用都是ajax调用,则可以使用一个对象来返回警告和内置于ajax调用中的其他消息。

我们做的另一件事是,对于一些处理批处理命令的页面,可能会有很多警告,那么我们有一个特殊页面,如果有警告知道如何处理警告列表,则会加载。

以下是我们在Python中设置和读取警告消息的代码。这是在我们的基本控制器类中,因此它在所有控制器中都可用。您也可以在javascript中编写读取部分:

def flash(self, msg, msg_type="info"):
    self.flash_info = (msg, msg_type)
    self.set_cookie('flash', base64.b64encode(bytes(json.dumps([msg, msg_type]), 'utf-8')))

def get_flash(self):
    msg = None
    msg_type = None
    if hasattr(self, "flash_info"):
        msg, msg_type = self.flash_info
    else:
        flash_msg = self.get_cookie('flash')
        if flash_msg:
            msg, msg_type = json.loads(base64.b64decode(flash_msg).decode('utf-8'))
            self.clear_cookie('flash')
    self.clear_cookie('flash')
    return msg, msg_type