有没有办法向用户显示警告并继续使用被调用函数?
我在龙卷风中找到的只是HTTPError。有这样的事情可以显示警告吗?
当前摘录:
if warning_bool:
warning_text = "Warning! You can still continue though..."
raise HTTPError(status_code=400, reason=warning_text)
put_function()
这会引发错误,并且不会调用该函数。
答案 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