Thursday, 16 May 2019

Redirect and Errors

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 − 1.location parameter is the URL where response should be redirected. 2.statuscode sent to browser’s header, defaults to 302. 3.response parameter is used to instantiate response.

The following status codes are standardized − 1.HTTP_300_MULTIPLE_CHOICES 2.HTTP_301_MOVED_PERMANENTLY 3.HTTP_302_FOUND 4.HTTP_303_SEE_OTHER 5.HTTP_304_NOT_MODIFIED 6.HTTP_305_USE_PROXY 7.HTTP_306_RESERVED 8.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 # 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')) 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 − 1.400 − for Bad Request 2.401 − for Unauthenticated 3.403 − for Forbidden 4.404 − for Not Found 5.406 − for Not Acceptabl 6.415 − for Unsupported Media Type 7.429 − Too Many Requests

Let us make a slight 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)

0 Comments:

Post a Comment

Popular Posts

Categories

Android (21) AngularJS (1) Books (3) C (75) C++ (81) Data Strucures (4) Engineering (13) FPL (17) HTML&CSS (38) IS (25) Java (85) PHP (20) Python (83) R (68) Selenium Webdriver (2) Software (13) SQL (27)