提问者:小点点

Flask异常处理和消息闪烁


我有python代码,当某些条件不满足时,它会在控制台中注册一个错误。 当不满足必要条件时,我试图在浏览器中看到同样的错误。 为了举例说明,考虑一下add_stuff函数中的基本思想,该函数检查输入是否为int类型。 如果不是,则将错误打印到屏幕上。

下面简单的烧瓶应用程序和相应的模板文件工作,值错误实际上是打印在屏幕上的。 但是,我试图“漂亮地打印”错误,这样它就不会打印出难看的jinga2错误页面,而是保持在同一个math.html页面上,将错误打印到屏幕上,或者可能重定向到一个吸引人的页面,而不是到处都是回溯等等。

from flask import Flask, render_template, request, session, current_app
server = Flask(__name__)

def add_stuff(x,y):
    if isinstance(x, int) and isinstance(y, int):
        z = x + y
        return z
    else:
        raise ValueError("Not integers")       


@server.route('/math')
def foo():
    a = 1
    b = 15
    out = add_stuff(a,b)
    return render_template('math.html', out=out)  

if __name__ == '__main__':
    server.run(debug=True)

这是一个模板文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>

<body>

{{out}}

</body>
</html>

共1个答案

匿名用户

您可以捕获add_stuff方法的异常,以停止显示Jinja2错误页面。

在这里,我已经在flash中包含了异常消息,并在模板中显示了它。 如果出现异常,我不会在模板中显示out值。

from flask import Flask, flash, redirect, render_template, \
     request, url_for

server = Flask(__name__)
server.secret_key = b'_5#y2L"F4Q8z\n\xec]/'


def add_stuff(x,y):
    if isinstance(x, int) and isinstance(y, int):
        z = x + y
        return z
    else:
        raise ValueError("Not integers")       


@server.route('/math')
def foo():
    a = 1
    b = "some string"
    out = None
    try:
        out = add_stuff(a,b)
    except Exception as e:
        flash(str(e))
    if out is not None:
        return render_template('math.html', out=out)
    else:
        return render_template('math.html')

math.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>

<body>
    {% with messages = get_flashed_messages() %}
      {% if messages %}
        <ul>
        {% for message in messages %}
          <li>{{ message }}</li>
        {% endfor %}
        </ul>
      {% endif %}
    {% endwith %}

{% if out %}
    {{out}}
{% endif %}
</body>
</html>

输出:

您还可以根据要求对flash消息进行分类(例如:错误,警告等)。 你可以在这里阅读官方文件。