我需要编写一个函数(Flask视图)来测试有关请求的几个条件,并根据这些测试返回一条消息。
例如......
def index():
test1result = test1(request.form['data'])
if not test1result:
message = 'Failed test 1'
test2result = test2(request.form['data'])
if not test2result:
message = 'Failed test 2'
test3result = test3(request.form['data'])
if not test3result:
message = 'Failed test 3'
return render_template('index.html', message = message)
如果第一次测试失败,我不希望第二次或第三次测试运行并覆盖我的消息。我的第一个想法是将return语句插入到每个IF块中,但这看起来很混乱。
答案 0 :(得分:2)
在这种情况下,您应该使用elif
仅在第一次测试失败时才分支到您以后的测试中,或者只是return
。但你也可以这样做:
def index():
messages = []
test1result = test1(request.form['data'])
if not test1result:
message.append('Failed test 1')
test2result = test2(request.form['data'])
if not test2result:
message.append('Failed test 2')
test3result = test3(request.form['data'])
if not test3result:
message.append('Failed test 3')
return render_template('index.html', messages=messages)
让您的视图显示所有错误消息。
答案 1 :(得分:2)
我的第一个想法是将return语句插入到每个IF块中,但这看起来很混乱。
如果您进行小型重构,则不是这样:
def index_message():
test1result = test1(request.form['data'])
if not test1result:
return 'Failed test 1'
test2result = test2(request.form['data'])
if not test2result:
return 'Failed test 2'
test3result = test3(request.form['data'])
if not test3result:
return 'Failed test 3'
return '......'
def index():
message = index_message()
return render_template('index.html', message = message)
或者,您可以使用else
和elif
来避免进一步处理。
如果您有更多测试,请将它们添加到数据结构(例如:list
)并使用循环。不要重复代码。
答案 2 :(得分:1)
您可以使用elif
。
首先运行所有测试,然后运行if-elif
块
def index():
test1result = test1(request.form['data'])
test2result = test2(request.form['data'])
test3result = test3(request.form['data'])
if not test1result:
message = 'Failed test 1'
elif not test2result:
message = 'Failed test 2'
elif not test3result:
message = 'Failed test 3'
return render_template('index.html', message = message)
答案 3 :(得分:0)
使用循环。
def index():
tests = [test1, test2, test3]
for i, test in enumerate(tests, 1):
if not test(request.form['data']):
return render_template('index.html', message="Failed test %s" % i)