5.6 KiB
Flask
Flask is a web framework. This means flask provides you with tools, libraries and technologies that allow you to build a web application. This web application can be some web pages, a blog, a wiki or go as big as a web-based calendar application or a commercial website. (https://pymbook.readthedocs.io/en/latest/flask.html)
SET UP
Open the terminal! Don't be afraid! If I(we) can do it, you can do it too.
Clone this repository (aka 'repo')
git clone https://git.xpub.nl/manetta/flask-example.git
then navigate to the folder. __NOTE:__For more info how to navigate in the terminal [shell_cheat_sheet] (https://pzwiki.wdka.nl/mediadesign/Shell_Cheat_Sheet)
cd flask-example
Create a virtual environment. This is a contained workspace where you can install packages and libraries. It is useful in order to keep track of external dependencies, avoid version conflicts, and it provides handy tools to share your workplace with others or install it somewhere else later on. Read more in the wiki ⛄︎!
python3 -m venv venv
This will create a virtual environment in a folder called venv
.
Note that the first venv
is the command, the second venv
is the name of the folder.
Once the virtual environmnent folder has been created, you need to activate it. There are different ways to do it, depending on your operative system. (we are at the terminal)
On Mac and Linux
source venv/bin/activate
On Windows
venv\Scripts\activate
If everything went ok you should notice that the virtual environment (venv)
is now active in your terminal.
Find more information info here: Python Virtual Environments: A Primer
Now you can install the requirements. For this small example the only required packages to install is Flask.
pip install flask
Now you are ready to go!
RUN
In order to start the application you need to run the app.py
with Python.
The simplest way to do it is: (btw you are still in the terminal)
python app.py
And that will prompt
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:3000
Press CTRL+C to quit
If you now open your browser and navigate to http://127.0.0.1:3000, and ta daaaa, the flask application is here!
The address http://127.0.0.1
is actually the address of your machine, also known as localhost
. If you try and change the url into localhost:3000
the result should be the same!
Keep in mind that, even if you are seeing it in a browser, this is actually running locally. It is not online!
Going online
When you want to publish the Flask app online, the easiest way to do it(and manage your project) is to use git to keep in sync with your local project.
For that you can create a new repo and follow the guided steps to push your app there.
There are plenty of ways to put your flask app online. Here in XPUB we mainly work with small self-hosted servers like the Soupboat and the Breadcube. These steps refer to this kind of setup.
.gitignore
When working with git, it could happen that you don't want to push all your files in the repository. That is the case for example with the venv
folder, of for other files related to your configurations such as .env
files, API keys, passwords, etc.
To manage what is going to be pushed or not you can use a .gitignore
file.
In this specific example we are gonna ignore the virtual environment and its contents, as well as some annoying hidden files generated by our dear machines.
venv/
.env
.DS_Store
There are some .gitignore
templates online.
You can find some here: A collection of .gitignore templates. Which one to use is related to the kind of project you are working on.
.env
Your computer and the server are different machines, and they could require different configurations. The port where you are running the local application could not be available in the server. Or you would need to add a prefix to the URL to make it works.
For example to work in the Soupboat your routes must begin with /soupboat/flask-example
, while in the Breadcube /breadcube/flask-example
, etc.
It's not handy to keep these variables in the code, because then you need to change it every time when you want to run the app in a different environment.
So, it's a good idea to separate things:
-
What stays the same Ideally the code is the same both in your local app and in the one online.
-
What changes the environmental variables: port, url prefix, debug mode, you name it
So here an .env
file could come in handy.
This example is designed in a way that doesn't require an .env
file on your local version, because the default values should be fine.
However in the server you will probably need to create one to adjust the url prefix and the specific port number where to run the app.
Here are the variables we are using, BUT keep in mind that your values will probably be different!
URL_PREFIX=/soupboat/flask-example
PORT=3000
Generate requirements.txt
(or maybe this happens in the beginning ??????? let's see)
pip freeze > requirements.txt
use pip to- create a requirements.txt file that specifies which packages we need to install
Setup remote repo
(remote meaning on the server)
RUN GLOBALLY..?
How to manage Locally and globally
use git