Zum Inhalt

Flask Web Api python⚓︎

In diesem Abschnitt geht es um eine Web API mit Flask in python.

Voraussetzungen⚓︎

Neue virtuelle Umgebung aufbauen. python3 -m venv .venv

Neue Umgebung aktivieren .venv/bin/activate

Notwendige Pakete installieren

  • pip install Flask

Projektstruktur erstellen⚓︎

Unterordner manuell erstellen für den Code beispielsweise app oder src.

Dort die main.py Datei erzeugen. In der Datei tragen wir nun ein erste, kleine Anwendung ein.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello_world():
    return "Hello, World!"

Es wird eine neue Flask Anwendung erzeugt und eine Funktion bekommt über die get Attributsfunktion die Ausführbarkeit bzw. einen Endpunkt.

Projekt starten⚓︎

Im Terminal starten wir per uvicorn die Anwendung. Falls anstelle von app der Ordnername src gewählt wurde, muss der Befehlt dementsprechend angepasst werden.

flask --debug --app main run

Datenmodel erstellen⚓︎

Neuen Ordner models erstellen, dort die Datei __init__.py erstellen.

Als nächstes erstellen wir eine Klasse als Poco und eine Klass als Schema für das Datenmodel der Notizen.

Neue Datei note.py erstellen und mit folgenden Inhalt füllen.

import datetime as dt
from marshmallow import Schema, fields

class Note(object):
    def __init__(self, title, content, category, published):
        self.title = title
        self.content = content
        self.category = category
        self.published = published
        self.created_at = dt.datetime.now()
        self.updated_at = dt.datetime.now()

    def __repr__(self):
        return '<Note(name={self.title!r})>'.format(self=self)

class NoteSchema(Schema):
    title = fields.Str(required=True)
    content = fields.Str(allow_none=True)
    category = fields.Str(default='Common', allow_none=True)
    published = fields.Boolean(default=False, required=False)
    created_at = fields.Date()
    updated_at = fields.Date()

Docker⚓︎

Datei Dockerfile erstellen und mit folgenden Inhalt füllen.

Dieses Image startet dann den flask Development Server.

FROM python:3.10-alpine

WORKDIR /code
COPY requirements.txt .

RUN pip install --no-cache-dir --upgrade -r requirements.txt

COPY app app

CMD [ "flask", "--app", "app.main", "run",  "--host", "0.0.0.0", "--port", "5000" ]

EXPOSE 5000