为什么Flask的登录方法使用'GET'请求?

6

我正在为一个项目学习Flask,想知道为什么示例代码中列出了方法“GET”和“POST”,而实际上只有在请求为“POST”时才尝试处理登录。

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != app.config['USERNAME']:
            error = 'Invalid username'
        elif request.form['password'] != app.config['PASSWORD']:
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            flash('You were logged in')
            return redirect(url_for('show_entries'))
    # Note that nowhere do we seem to care about 'GET'...
    return render_template('login.html', error=error)
2个回答

8

您的函数处理GET和POST方法。

  • 当使用GET方法时,会返回登录表单(login.html)供用户登录。这是该函数的最后一行。

  • 当使用POST方法时,使用提供的登录/密码验证表单。之后,用户将被重定向到另一个页面(show_entries的url),或者再次发送登录表单以及相关错误。

您应该阅读'何时使用POST,何时使用GET?'了解有关为什么使用POST来处理登录表单以及为什么使用GET来发送它的更多详细信息。


5
return render_template('login.html', error=error)GET 的处理程序。
思考这个逻辑:
1. 如果请求方法是 POST: * 检查凭证,设置错误方法。 * 如果没有凭据错误,返回正确的重定向。 2. 如果在代码的 POST 部分有错误,render_template 将获得这些错误,否则它将从方法开头获得 None。我假设如果在 render_template 中错误为 None,它可能只呈现一个普通的登录表单。
注:我从未使用过 Flask,但我了解 Python。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接