Flask – 重定向与错误



Flask 类有一个 **redirect()** 函数。调用时,它会返回一个响应对象,并将用户重定向到另一个目标位置,并指定状态码。

**redirect()** 函数的原型如下所示:

Flask.redirect(location, statuscode, response)

在上述函数中:

  • **location** 参数是要将响应重定向到的 URL。

  • **statuscode** 发送到浏览器的标头,默认为 302。

  • **response** 参数用于实例化响应。

以下状态代码是标准化的:

  • HTTP_300_MULTIPLE_CHOICES
  • HTTP_301_MOVED_PERMANENTLY
  • HTTP_302_FOUND
  • HTTP_303_SEE_OTHER
  • HTTP_304_NOT_MODIFIED
  • HTTP_305_USE_PROXY
  • HTTP_306_RESERVED
  • HTTP_307_TEMPORARY_REDIRECT

**默认状态** 代码为 **302**,表示 **“已找到”**。

在以下示例中,**redirect()** 函数用于在登录尝试失败时再次显示登录页面。

from flask import Flask, redirect, url_for, render_template, request
# Initialize the Flask application
app = Flask(__name__)

@app.route('/')
def index():
   return render_template('log_in.html')

@app.route('/login',methods = ['POST', 'GET']) 
def login(): 
   if request.method == 'POST' and request.form['username'] == 'admin' :
      return redirect(url_for('success'))
   else:
      return redirect(url_for('index'))

@app.route('/success')
def success():
   return 'logged in successfully'
	
if __name__ == '__main__':
   app.run(debug = True)

Flask 类具有 **abort()** 函数,并带有一个错误代码。

Flask.abort(code)

**Code** 参数采用以下值之一:

  • **400** - 对于错误请求

  • **401** - 对于未经身份验证

  • **403** - 对于禁止

  • **404** - 对于未找到

  • **406** - 对于不可接受

  • **415** - 对于不支持的媒体类型

  • **429** - 请求过多

让我们在上述代码中的 **login()** 函数中稍微修改一下。如果要显示“未授权”页面,而不是重新显示登录页面,请将其替换为对 **abort(401)** 的调用。

from flask import Flask, redirect, url_for, render_template, request, abort
app = Flask(__name__)

@app.route('/')
def index():
   return render_template('log_in.html')

@app.route('/login',methods = ['POST', 'GET'])
def login():
   if request.method == 'POST':
      if request.form['username'] == 'admin' :
         return redirect(url_for('success'))
      else:
         abort(401)
   else:
      return redirect(url_for('index'))

@app.route('/success')
def success():
   return 'logged in successfully'

if __name__ == '__main__':
   app.run(debug = True)
广告