- First, create a new folder in our application and move all our files inside this new folder.
- Then, create
__init__.py
in our folders, which are to be used as modules. - After that, create a new file called
run.py
in the topmost folder. As the name implies, this file will be used to run the application. - Finally, create separate folders to act as modules.
Refer to the following file structure for a better understanding:
First, the flask_app/run.py
file will look something like the following lines of code:
Then, the flask_app/my_app/__init__.py
file will look something like the following lines of code:
Then, we will have an empty file just to make the enclosing folder a Python package, flask_app/my_app/hello/__init__.py
:
The models file, flask_app/my_app/hello/models.py
, has a non-persistent key-value store:
Finally, the following is the views file, flask_app/my_app/hello/views.py
. Here, we fetch the message corresponding to the key that is asked for and also have a provision to create or update a message:
Note
Remember that the preceding code is nowhere near production-ready. It is just for demonstration and to make things understandable for new users of Flask.
We can see that we have a circular import between my_app/__init__.py
and my_app/hello/views.py
, where, in the former, we import views
from the latter, and in the latter, we import the app
from the former. So, this actually makes the two modules depend on each other, but here, it is actually fine as we won't be using views
in my_app/__init__.py
. We do the import of views
at the bottom of the file so that they are not used anyway.
We have used a very simple non-persistent in-memory key-value store for the demonstration of the model layout structure. It is true that we could have written the dictionary for the MESSAGES
hash map in views.py
itself, but it's best practice to keep the model and view layers separate.
So, we can run this app using just run.py
:
Note
The reloader indicates that the application is being run in the debug mode, and the application will reload whenever a change is made in the code.
Now, we can see that we have already defined a default message in MESSAGES
. We can view this message by opening http://127.0.0.1:5000/show/default
. To add a new message, we can type http://127.0.0.1:5000/add/great/Flask%20is%20greatgreat!!
. This will update the MESSAGES
key-value store to look like the following:
Now, if we open the link http://127.0.0.1:5000/show/great
in a browser, we will see our message, which, otherwise, would have appeared as a not-found message.