Skip to content

FastAPI

Jest to jeden z mikroframeworków pythonowych wykorzystywanych przy apkach webowych.
Jego zaletą na tle podobnych bibliotek typu flask jest automatyczne generowanie dokumentacji oraz automatyczne sprawdzanie i walidacja danych.

link

Podstawy

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, slowo: Optional[str] = None):
    """
    przyjmujemy zapytanie i zwracamy je jako json
    np /items/8?q=zbyszek
    """
    return {"item_id": item_id, "slowo": slowo}

Aby uruchomić powuższy kod (plik main.py) należy użyć komendy:

uvicorn main:app --reload
# main - nazwa pliku
# app - obiekt typu FastAPI
# --reload - restartuje serwer po zmianach w kodzie

Dodatkowo pod ścieżką /docs dostępna jest dokumentacja użytych API.

Definiowanie modeli

Modele można definiować z wykorzystaniem biblioteki pytandic (tutorial od bulldogjobs).

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Optional[bool] = None


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

Serwowanie plików HTML

FastAPI może być łączone z każdym silnikiem do generowania plików HTML ze schematów. Najpopularniejszym wyborem jest tutaj Jinja2 (przykład użycia).

Jeśli nie potrzebujemy niczego tak skomplikowanego i wystarczą nam proste, ręcznie napisane pliki HTML to wystarczy wystawić je jako pliki statyczne lub jako pojedyncze pliki.

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")

#lub
@app.get("/")
async def read_index():
    return FileResponse('index.html')

Bazy danych

FastAPI nie jest związane z żadną biblioteką do baz danych.
Mamy tutaj dużą dowolność. Dla przykładu w oficjalnej dokumentacji pokazano przykład użycia sla SQLAlchemy. Można też użyć Peewee.

LINK DO MOJEGO TUTORIALA SQLALCHEMY