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)
# __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
# 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 fileYou 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:
# users/__init__.py
from flask import Blueprint
users = Blueprint('users', __name__)
from . import views
# 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😃.