English 中文(简体)
Flask - Redirect & Errors
  • 时间:2024-11-03

Flask – Redirect & Errors


Previous Page Next Page  

Flask class has a redirect() function. When called, it returns a response object and redirects the user to another target location with specified status code.

Prototype of redirect() function is as below −

Flask.redirect(location, statuscode, response)

In the above function −

    location parameter is the URL where response should be redirected.

    statuscode sent to browser’s header, defaults to 302.

    response parameter is used to instantiate response.

The following status codes are standardized −

    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

The default status code is 302, which is for ‘found’.

In the following example, the redirect() function is used to display the login page again when a login attempt fails.

from flask import Flask, redirect, url_for, render_template, request
# Initiapze the Flask apppcation
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 class has abort() function with an error code.

Flask.abort(code)

The Code parameter takes one of following values −

    400 − for Bad Request

    401 − for Unauthenticated

    403 − for Forbidden

    404 − for Not Found

    406 − for Not Acceptable

    415 − for Unsupported Media Type

    429 − Too Many Requests

Let us make a spght change in the login() function in the above code. Instead of re-displaying the login page, if ‘Unauthourized’ page is to be displayed, replace it with call to 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)
Advertisements