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
    default status代码是302,这是为‘found’.
    在以下示例中,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()上面代码中的函数。而不是重新显示登录页面,如果‘Unauthourized’要显示页面,将其替换为调用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)