2012-05-21 6 views
6

Estoy tratando de obtener más información sobre Flask para un proyecto, y me pregunto si alguien me puede explicar por qué el código muestra los métodos 'GET' y 'POST', cuando solo intenta procesar un inicio de sesión. si la solicitud fue 'POST'?¿Por qué el método de inicio de sesión de Flask usa '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) 

Respuesta

8

métodos GET y POST son manejados por tanto su función.

  • Cuando se utiliza GET, se devuelve el formulario de acceso (login.html) para el usuario para iniciar sesión. Esta es la última línea de la función.

  • Cuando se usa POST, el formulario se valida utilizando el nombre de usuario/contraseña proporcionado. Después de eso, el usuario se redirige a otra página (url show_entries) o el formulario de inicio de sesión se envía en otro momento con el error relacionado.

Debe leer 'When do you use POST and when do you use GET?' para más detalles sobre la razón por la POST se utiliza para procesar el formulario de acceso y por qué se utiliza GET para enviarlo.

5

return render_template('login.html', error=error) es el manejador de GET.

Piense en la lógica:

  1. si request.method == 'post':
    1. verificación Credenciales, defina Método de error
    2. Si no hay errores de credenciales devuelven el redireccionamiento correcta
  2. si hubo errores en la sección POST del código render_template obtiene esos errores, de lo contrario obtiene el None desde el comienzo del método. Supongo que si el error es None en render_template, probablemente solo presente un simple formulario de inicio de sesión.

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

Cuestiones relacionadas