2012-09-04 8 views
19

Parece que en Flask, las cookies se establecen modificando el objeto de respuesta directamente.En Flask, configure una cookie y luego redirija al usuario

¿Cómo puedo devolver un objeto de respuesta, pero también redirijo a un usuario a una página diferente después de iniciar sesión correctamente? Me gustaría redirigir específicamente al usuario en lugar de mostrar una página diferente, en caso de que el usuario presione REFRESH.

Aquí está mi código actual, que simplemente muestra la misma página, login.html:

@app.route('/login', methods=['POST', 'GET']) 
def login(): 
    errors = [] 

    if request.method == 'POST': 

    email = request.form['email'] 
    password = request.form['password'] 

    #Check the user's e-mail 
    try: 
     u = User(email) 
    except UserError, e: 
     errors.append(e) 
    else: 

     #Check the user's password 
     if not u.authenticatePassword(password): 
     errors.append(('password','Invalid password')) 
     return render_template('login.html',error=errors) 

    #Set the session 
    s = Session() 
    s.user_id = u.user_id 
    s.ip = request.remote_addr 

    #Try to set the cookie 
    if s.setSession(): 
     response = make_response(render_template('login.html',error=errors)) 
     response.set_cookie('session_id', s.session_id) 
     return response 

    return render_template('login.html',error=errors) 

Respuesta

34

Debe cambiar su código para algo como:

from flask import make_response 
if s.setSession(): 
    response = make_response(redirect('/home')) 
    response.set_cookie('session_id', s.session_id) 
    return response 
Cuestiones relacionadas