【发布时间】:2020-07-02 16:33:15
【问题描述】:
此视图在发出 GET 请求时接收 ?next= 参数,但一旦用户向同一视图发出 POST 请求,该参数就会丢失。我见过的示例没有明确传递查询参数,但似乎能够保留它们并在以下 POST 请求中获取它们。
@blueprint.route("/login", methods=["GET", "POST"])
@logout_required()
def login():
form = LoginForm()
#1
print("NEXT:", request.args.get("next"))
if form.validate_on_submit():
u = User.query.filter_by(username=form.username.data).first()
if u and u.check_password(password=form.password.data):
if u.is_active():
#2
print("NEXT:", request.args.get("next"))
login_user(u, remember=form.remember.data)
next_url = request.args.get("next")
if not next_url or url_parse(next_url).netloc != "":
next_url = url_for("main.index")
return redirect(next_url)
else:
flash("This account has been disabled", "error")
else:
flash("Invalid password or username.", "error")
return render_template("auth/login.html", form=form)
【问题讨论】:
-
感谢您的链接。我已经设法缩小了来自我如何在
<form>中提交 POST 请求的问题。当我将<form>操作属性设置为空字符串时,它会保留原始请求参数并将它们传递给视图函数。我不确定它以什么方式这样做,并且想知道是否有一种明确的方式来设置动作以传递参数。
标签: python http flask flask-login