2012-05-21 40 views
6

我想了解更多关于Flask的一个项目,我想知道如果有人可以向我解释为什么示例代码列出方法'GET'和'POST',当它只尝试处理登录如果请求是'POST'?为什么Flask的登录方法使用'GET'?

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

回答

8

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

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

  • 使用POST时,表单使用提供的登录名/密码进行验证。之后,用户被重定向到其他页面(URL为show_entries),或者登录表单被再次发送并显示相关错误。

你应该对为何POST是用来处理登录表单和为什么要用来发送更多的细节读“When do you use POST and when do you use GET?”。

5

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

想想逻辑:

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

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

相关问题