我在Flask中工作,我希望允许用户无需登录即可将信息输入表单,但是如果他们提交表单,则需要登录。登录后,就好像用户刚刚提交了表单一样(他们不必重新输入任何信息)。
为了存储他们的信息,我使用了这样的会话。效果很好:
if request.method == "POST":
if "arg1" not in session.keys() and "arg2" not in session.keys():
session["arg1"] = request.form.get('arg1')
session["arg2"] = request.form.get('arg2')
但是,我在需要登录的部分上遇到了麻烦。我知道我可以在整个路由上使用@login_required,但是如果请求是post方法,我只想使用@login_required即可。我试过简单地在检查方法是否为发布请求后添加@login_required,但它不起作用。
我的登录路线如下:
@app.route("/login", methods = ["POST", "GET"])
def login():
#log user in
return redirect(request.args.get("next") or url_for('index'))
似乎我需要两件事。
1:仅将@login_required应用于帖子请求。
2:要让request.args.get(“ next”)调用发布请求,而不是获取请求
我如何去做这两件事并实现我的目标?
谢谢!
中断您的路线。 1表示GET,1表示POST
@app.route("/login", methods = ["GET"])
def get_login():
return stuff
@app.route("/login", methods = ["POST"])
@login_required
def post_login():
return stuff
这里可以使用几种模式,但这是最直接的。