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)
4

2 回答 2

8

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

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

  • 使用 POST 时,使用提供的登录名/密码验证表单。之后,用户要么被重定向到另一个页面(用于show_entries的 url),要么再次发送登录表单并显示相关错误。

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

于 2012-05-21T13:50:12.897 回答
5

return render_template('login.html', error=error) 的处理程序GET

想想逻辑:

  1. 如果 request.method == 'POST':
    1. 检查凭据,设置错误方法
    2. 如果没有凭据错误返回正确的重定向
  2. 如果代码的 POST 部分有render_template错误,则获取这些错误,否则None从方法的开头获取。我假设如果出现错误Nonerender_template它可能只是呈现一个普通的登录表单。

Note: I've never used flask, but I understand python

于 2012-05-21T13:46:07.890 回答