DEV Community

Cover image for Flask Delicious Tutorial : Building a Library Management System Part 4 - Focus on Responses
Abdur-Rahmaan Janhangeer
Abdur-Rahmaan Janhangeer

Posted on

1

Flask Delicious Tutorial : Building a Library Management System Part 4 - Focus on Responses

Previous: Part 3: Routes

This post is a reference for what you need to return / flask responses. Feel free to come back again. I have configured all in this repo:

DeliciousFlask-4.1

Download and run app.py, see Part2 for in the series if you are a beginner in Python. It's a post i wish i had when i started Flask.

In the repo there are different kinds of returns, let's begin by returning a string.

Returning Strings

Alt Text

Going to http://127.0.0.1:5000/ gives us home as configured here:

@app.route('/')
def index():
    return 'home'

Returning Integers

@app.route('/return-int')
def return_int():
    return 1

Going to http://127.0.0.1:5000/return-int gives us:

Alt Text

as it is not possible to return integers. The whole error line says

TypeError: The view function did not return a valid response. The return type must be a string, dict, tuple, Response instance, or WSGI callable, but it was a int.

So, you know what to return.

Returning Json

In Python, dictionaries were purposely designed to imitate JSON for easy transfer of formats. We use jsonify to convert a dictionary to JSON response.

@app.route('/return-json')
def return_json():
    data = {
        'name': 'Umar',
        'address': 'Port Louis, Mauritius',
        'age': 15,
        'has_pass': True
    }
    return jsonify(data)

Going to http://127.0.0.1:5000/return-json gives us:

Alt Text

Note that the True returned became the JavaScript true, our integer of 15 turned into a JavaScript integer and our String became a JavaScript string though it looks the same. JSON means JavaScript Object Notation.

Returing HTML

When returning a string you actually return HTML strings.

@app.route('/return-html')
def return_html():
    return '<h1>I am a BIG header enclosed in a h1 tag</h1>'

Going to http://127.0.0.1:5000/return-html gives us:

Alt Text

But of course it is not convenient to return whole files.

Let's see how to return files

Return Files

@app.route('/return-file')
def return_file():
    return render_template('index.html')

Going to http://127.0.0.1:5000/return-html gives us a blank page ... Try putting some html in the index file found in the templates folder. Flask searches for files in a folder named templates by default.

Redirect

@app.route('/redirect-home')
def return_redirect():
    return redirect('/')

Going to http://127.0.0.1:5000/redirect-home redirects to http://127.0.0.1:5000/

Redirect to function

@app.route('/redirect-function-html')
def return_redirect_function():
    return redirect(url_for('return_html'))

Going to http://127.0.0.1:5000/redirect-function-html redirects to http://127.0.0.1:5000/return-html

url_for searches for the function and returns the response

Redirect in case of blueprints

Though we'll cover blueprints later on, including this one here to serve as a reference

Let's say you have a blueprint named book. You want to redirect to the function named index. You do it like this:

return redirect(url_for('book.index'))

Hope you liked this summary sheet! Stay tuned for the next part!

My mail if you did not understand something: arj.python at gmail dot com

You have anything you'd want to see in this series? Tell me below!

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up