Flask-如何仅要求发布请求才能登录

问题描述 投票:1回答:1

我在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”)调用发布请求,而不是获取请求

我如何去做这两件事并实现我的目标?

谢谢!

authentication flask flask-login
1个回答
0
投票

中断您的路线。 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

这里可以使用几种模式,但这是最直接的。

© www.soinside.com 2019 - 2024. All rights reserved.