【发布时间】:2012-09-04 20:53:55
【问题描述】:
在我的类中捕获错误并将错误消息从类“冒泡”到视图并最终显示在模板上的正确方法是什么?
我现在遇到的问题是,我最终在模型和视图控制器中都发现了两次相同的错误。这感觉不对。
这是一个例子:
模型/user.py
class User(object):
errors = []
def __init__(self, string=None):
""" Initialize the user object
"""
#See if the input string is an e-mail address
try:
string_is_email = string.index('@')
except ValueError:
self.errors.append('Invalid e-mail address')
raise ValueError
查看/login.py
@app.route('/login', methods=['POST', 'GET'])
def login():
if request.method == 'POST':
email = request.form['email']
password = request.form['password']
#Catch invalid e-mails
try:
u = User(email)
except ValueError:
errors = u.errors
#In case the user hasn't POSTED
try:
errors = u.errors
except:
errors = None
return render_template('login.html', error=errors)
模板/login.html
{% if error %}
<div class="error">
<ul>
{% for message in error %}
<li>{{ message }}</li>
{% endfor %}
</ul>
</div>
有没有更简洁的方法来做到这一点?
【问题讨论】:
-
我认为你不需要
models/user.py中的 try/except ......因为如果没有发现错误会自动冒泡 -
我确实这样做是为了设置错误消息。如果我没有那个 try/except ,我必须将消息放在视图中。但是,如果我在另一个视图中使用该类,我将不得不复制代码
标签: python error-handling flask