Skip to main content

URL Shortner with Python and Flask - Chapter 4 - Blueprints

Remember? In the previous part we created flask app which had all the code in a single file and we called it app.py. As our site was small, we were able to manage the code. But what if, you want to create a website as big as facebook? Yes, features like groups, friends, newsfeed, Pages etc. can be created using flask. But do you think, that it would be better if all the data were to be on the same file?

If you are becoming bigger then you should consider separating code into different files so that if you want to edit one feature then you can do easily. The main point here is, organising the files and features becomes easy.

But how do we do we organize and seperate features in flask? The best answer is Flask-Blueprints. There are many advantages of using Blueprints, and you can read them from here: Why Blueprints?.

Starting from scratch

Now that you are convinced, how do we use blueprints?. Lets see an example.

The following is the __init__.py file which you will store in the CWD(Current Working Directory)


In [ ]:
# __init__.py
from flask import Flask
# users blueprint
from users import users

app = Flask(__name__)

# registering the blueprint
app.register_blueprint(users)

# start the app
if __name__ == "__main__":
    app.run(debug = True)

After you have created the above file, create a folder named users and __init__.py inside the users folder.

So your folder structure will be:

├── __init__.py            // File with app object
└── users
    ├── __init__.py        // users Blueprint file
In [ ]:
# users/__init__.py
from flask import Blueprint

# we will import this variable
users = Blueprint('users', __name__)

@users.route('/IAmUser')
def iAmUser():
    return "Hello I am user and I am from 'users' blueprint"

After you have saved the above file, fire up a terminal or command prompt in CWD, browse to the URL which we have created in the blueprints and you should see a message stating - "Hello I am user and I am from 'users' blueprint".

How it works?

Even though blueprints is one of the important concepts in flask application creation I will give you a very brief overview of what actually is happening in the background.

  • When command prompt fires up, it will first import Flask from flask
  • Next from the users folder we are importing users variable.
  • After we have imported the files we are creating our app object.
  • We are registering the users blueprint with the app so that it will import all the URL's(binding functions).
  • Start the server and serve files to the user.

For beginners, I can understand that you are confused with __init__.py files. For more engagement and insight you should visit Python - What is init.py for?

Extending the application

Getting upto here is a big deal. After this it is very simple and straight forward. You can register as many blueprints as you want or require. But remember, blueprints help us in broad classification of our site functions.

You can serve templates for each and user from the templates folder in the users folder. For this example, your folder structure will look as follows:

├── __init__.py            // File with app object
└── users
    ├── templates        // templates
        ├── index.html
    ├── __init__.py        // users Blueprint file
You can even separate the views(URLs) from the main file(__init__.py). The example will assume the folder structure as follows:
├── __init__.py            // File with app object
└── users
    ├── __init__.py        // users Blueprint file
    ├── views.py           // views(URLs)

__init__.py file in CWD will not see any changes.

users/__init__.py file will be as follows:

In [ ]:
# users/__init__.py
from flask import Blueprint

users = Blueprint('users', __name__)

from . import views
In [ ]:
# users/views.py
from . import users

@users.route('/IAmUser')
def iAmUser():
    return "Hello I am user and I am from 'users' blueprint"

Reload the server and you should see the same text that you have seen in the previous example.

This one is simple and in this example we are only defining the binding functions in some other file and importing that file into the main file and this will make the app package more and more manageable.

For more information on Blueprints you can see: Modular Applications with Blueprints, Python - Whatare Flask Blueprints

Note: If you have not understood anything, then don't worry. Our application is so small and so we are not going to use blueprints in our app. 😃

But, if you haven't understood anything or have any doubt, don't hesitate to comment and I will be very happy to help you.

If you have found any typo or have feedback then please comment in the comment box and I will be glad to see your comment.

You can also contact me.

Thank you. Have a nice day😃.

Popular posts from this blog

Project Euler Problem 62 solution with python

Cubic permutations ¶ The cube, 41063625 (3453), can be permuted to produce two other cubes: 56623104 (3843) and 66430125 (4053). In fact, 41063625 is the smallest cube which has exactly three permutations of its digits which are also cube. Find the smallest cube for which exactly five permutations of its digits are cube.

Project Euler Problem 67 Solution with Python

Maximum path sum II By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23. 3 7 4 2 4 6 8 5 9 3 That is, 3 + 7 + 4 + 9 = 23. Find the maximum total from top to bottom in triangle.txt (right click and 'Save Link/Target As...'), a 15K text file containing a triangle with one-hundred rows.

Problem 43 Project Euler Solution with python

Sub-string divisibility The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property. Let d 1 be the 1 st digit, d 2 be the 2 nd digit, and so on. In this way, we note the following: d 2 d 3 d 4 =406 is divisible by 2 d 3 d 4 d 5 =063 is divisible by 3 d 4 d 5 d 6 =635 is divisible by 5 d 5 d 6 d 7 =357 is divisible by 7 d 6 d 7 d 8 =572 is divisible by 11 d 7 d 8 d 9 =728 is divisible by 13 d 8 d 9 d 10 =289 is divisible by 17 Find the sum of all 0 to 9 pandigital numbers with this property. One might write a simple solution using direct if else statements for this problem. Using if else statements, the execution time may be a few seconds. But this is not a very good approach. I too had written a program with if else statement which will take each and every permutation of the 0-9 Pandigital and check for the conditions given in the qu...