Redirects and Custom Error Pages in Flask

Tutorial 5 of 5

1. Introduction

In this tutorial we're going to cover the basics of handling redirects and creating custom error pages in Flask. This is an important aspect of web development as it provides a better user experience, guiding users through our site and presenting them with helpful information when something goes wrong.

What We'll Learn:
- How to handle redirects in Flask.
- How to create custom error pages in Flask.

Prerequisites:
- Basic knowledge of Python.
- Familiarity with Flask. If you're new to Flask, you can check out the official Flask tutorial.

2. Step-by-Step Guide

Handling Redirects in Flask:

In Flask, we handle redirects using redirect() function. It generates a response with a location header and a 302 status code.

Creating Custom Error Pages in Flask:

We can create custom error pages in Flask using the errorhandler() decorator. It allows us to specify a function to handle specific HTTP error codes.

In the next section, we'll walk through some examples of these concepts.

3. Code Examples

Example 1: Basic Redirect

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def home():
    return redirect(url_for('hello_world'))

@app.route('/hello')
def hello_world():
    return 'Hello, World!'

In this example, when users access the '/' route, they are redirected to the '/hello' route.

Example 2: Custom Error Page

from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(404)
def page_not_found(error):
    return render_template('404.html'), 404

In this example, when users access a page that doesn't exist (i.e., they receive a 404 error), they are directed to a custom '404.html' page.

4. Summary

In this tutorial, we learned how to handle redirects in Flask using redirect() and url_for(), and how to create custom error pages using errorhandler(). These are essential tools for improving user experience on your website.

For further learning, you can explore other HTTP status codes and how to handle them in Flask.

5. Practice Exercises

Exercise 1: Create a Flask app that redirects users from '/old' route to '/new' route.

Solution:

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/old')
def old():
    return redirect(url_for('new'))

@app.route('/new')
def new():
    return 'Welcome to the new page!'

Exercise 2: Create a Flask app with a custom error page for 500 (Internal Server Error).

Solution:

from flask import Flask, render_template

app = Flask(__name__)

@app.errorhandler(500)
def internal_error(error):
    return render_template('500.html'), 500

Remember, it's always a good practice to have custom error pages for common HTTP status codes. This will make your website more user-friendly.