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 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...

Add/Embed SVG to Blogger website

In this post I will tell you my method(trick) of adding SVG images in a blogger website or blog. Before starting , the first thin g I am assu m ing is that you are aware of SVG if you are here. If not please see S calable V ec tor G raphics Recently when I tried to embed a SVG image for a post on pygal, I tried uploading the SVG file and blogger Image uploader came up with an error, because of which I had to find some other way.  SVG File upload Error in Blogger  I started sea rc hing Google " Embed SVG in Blogger " . I found blogorrhea , w h ich gave some i nformatio n on add ing SVG directly as a markup , which worked , but I faced another problem using this . Also th is guy has used lot of Javascript which was confusin g for me, being new to using SVG.   So I first t houg ht of learning on h ow to embed SVG in HTML and t his on e worked out. Actually we can embed SVG in HTML i n following ways: Using Object tag Using Iframe tag Using embed...