我正在努力修改cookiecutter Flask应用。在其中我有以下功能,它正常工作:
@blueprint.route("/home/", methods=["GET", "POST"])
def home():
form = LoginForm(request.form)
# Handle logging in
if request.method == 'POST':
if form.validate_on_submit():
login_user(form.user)
flash("You are logged in.", 'success')
redirect_url = request.args.get("next") or url_for("user.profile")
return redirect(redirect_url)
else:
flash_errors(form)
return render_extensions("public/home.html", form=form)
在行中:
redirect_url = request.args.get("next") or url_for("user.profile")
在命令行中:
>>> request.args.get('next')
>>> url_for("user.profile")
'/users/profile'
>>> redirect_url
'/users/profile'
这是一个基本问题,但我假设python同时评估request.args.get(" next")和url_for(" user.profile")和选择第一个不是'无'分配?
答案 0 :(得分:2)
由于short-circuit evaluation,它只评估第二个表达式,如果第一个表达式在转换为bool
时为False
。
您可以在每个表达式中添加print
来自行验证:
def good():
print 'good()'
return True
def bad():
print 'bad()'
return False
然后
good() or bad()
输出:
good()
虽然
bad() or good()
输出:
bad()
good()
答案 1 :(得分:1)
Python或首先评估左边条件;如果它是“真实的”,则返回评估结果,否则返回评估正确条件的结果。
大多数值都是真实的,falsey值包括None,zero,空字符串,空列表或其他空容器。