42

Flask では、応答オブジェクトを直接変更することで Cookie が設定されているようです。

応答オブジェクトを返すだけでなく、ログインに成功したときにユーザーを別のページにリダイレクトするにはどうすればよいですか? ユーザーが REFRESH を押した場合に備えて、別のページをレンダリングするのではなく、ユーザーを具体的にリダイレクトしたいと思います。

同じページ 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)
4

1 に答える 1

74

コードを次のように変更する必要があります。

from flask import make_response
if s.setSession():
    response = make_response(redirect('/home'))
    response.set_cookie('session_id', s.session_id)
    return response
于 2012-09-04T23:08:00.293 に答える