v0.1.0 Start document voor Flask door HU IICT.
Flask is een webapplicatie-frameworks. Het voldoet aand Web Server Gateway Interface (WSGI), voor de communicatie tussen webservers en webapplicatie-frameworks. Zo kan je met Python ook webapplicaties ontwikkelen.
Maak gebruik van Virtual Environment (venv) voor je Python ontwikkeling.
mkdir flaskApp
cd flaskApp
python -m venv venv
source ./venv/bin/activate
Nu kan je flask installeren en je eerste Python Flask applicatie maken.
(venv)$ pip install flask
(venv)$ pip install wheel
(venv)$ pip freeze > requirements.txt
(venv)$ sudo nano flaskApp.py
Maak een ‘Hello World’ serverapplicatie in Flask.
#flaskApp.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "<h1>Hello World</h1>"
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5000')
Controleer of je applicatie werkt.
(venv)$ python flaskApp.py
Als het goed is heb je nu een eerste applicatie gemaakt. Navigeer met je browser naar http://< your hostname or ip >:5000
Als alles werkt kunnen we de venv verlaten met deactivate
.
Maak een Docker image aan voor je applicatie. Voeg onderstaand toe aan een Dockerfile een bestand met de naam Dockerfile
zonder extensie (gebruik nano of vi om het bestand te maken).
FROM python:3.9.2
WORKDIR /code
COPY requirements.txt /code
RUN pip install -r requirements.txt --no-cache-dir
COPY . /code
CMD python flaskApp.py
Maak een Docker image.
docker build -t flaskapp .
Voer je Flask applicatie uit als een Docker container
sudo docker run --name flaskapp -d --restart unless-stopped -p 5000:5000 flaskapp
#Import Raspberry Pi GPIO library
import RPi.GPIO as GPIO
#Import Flask
from flask import Flask, render_template
app = Flask(__name__)
#Ignore warnings
GPIO.setwarnings(False)
#Use physical pin numbering
GPIO.setmode(GPIO.BOARD)
#Pin 10 as input
GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
@app.route("/")
def index():
# Read Sensors Status
button = GPIO.input(10)
templateData = {
'title' : 'GPIO input',
'button' : button
}
return render_template('index.html', **templateData)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)