📜  Flask重定向和错误

📅  最后修改于: 2021-01-02 04:32:01             🧑  作者: Mango

烧瓶重定向和错误

Flask类提供了redirect()函数,该函数将用户重定向到具有指定状态代码的某个指定URL。

HTTP状态代码是服务器对浏览器请求的响应。当我们访问网站时,请求将发送到服务器,然后服务器用三位数代码(HTTP状态代码)响应浏览器的请求。此状态代码也代表错误。

下面给出了使用redirect()函数的语法。

Flask.redirect(,,  )

它接受以下参数。

SN Parameter Description
1 location It is the URL where the response will be redirected.
2 status code It is the status code that is sent to the browser’s header along with the response from the server.
3 response It is the instance of the response that is used in the project for future requirements.

考虑以下示例,在该示例中,否则将在成功登录时使用HTTP状态代码302(找到)将用户重定向到成功页面。用户仅还原到此页面。

login.py

from flask import *
app = Flask(__name__)

@app.route('/')
def home ():
    return render_template("home.html")

@app.route('/login')
def login():
    return render_template("login.html");

@app.route('/validate', methods = ["POST"])
def validate():
    if request.method == 'POST' and request.form['pass'] == 'jtp':
        return redirect(url_for("success"))
    return redirect(url_for("login"))

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

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

home.html



home


Welcome to the website

login

login.html



    login


    
Email
Password

在上面的示例中,URL'/'包含登录页面的链接,如下图所示。

下图所示的登录页面包含提示用户输入电子邮件和密码,并且提交按钮将用户重定向到URL / validate。

在这种情况下,由于我输入了不等于'jtp'的随机密码,因此用户仅恢复到该页面(登录页面)。

但是,仅当用户输入的密码为“ jtp ”时,用户才被重定向到URL /成功。下图显示了URL http:// localhost:5000 / success(成功登录时生成)。

标准HTTP代码

以下HTTP代码是标准化的。

  • 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

默认状态码为HTTP_302_FOUND。

abort()函数

abort()函数用于处理客户端请求中涉及错误的情况,例如错误请求,未经授权的访问等等。但是,由于发生错误,将提及错误代码。

下面给出了使用abort()函数的语法。

Flask.abort(code)

根据指定的错误,我们可以提及以下错误代码。

  • 400:不好的要求
  • 401:未经授权的访问
  • 403:禁止
  • 404:找不到
  • 406:不可接受
  • 415:用于不受支持的媒体类型
  • 429:请求过多

让我们修改上述示例中的脚本login.py,并在用户输入任何随机密码的情况下,将abort()函数与错误代码401(用于未授权访问)一起使用。

from flask import *
app = Flask(__name__)

@app.route('/')
def home ():
    return render_template("home.html")

@app.route('/login')
def login():
    return render_template("login.html");

@app.route('/validate', methods = ["POST"])
def validate():
    if request.method == 'POST' and request.form['pass'] == 'jtp':
        return redirect(url_for("success"))
    else:
        abort(401)

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

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

如果密码错误,它将产生以下结果。

在此,由于用户已请求对资源进行未经授权的访问,因此我们使用了错误代码401。我们可以根据错误情况将其更改为任何代码。