Files
Crumb-Core-v.1/docs/man/python/fastapi_cheatsheet.md

2.2 KiB

🐍 CrumbMan: FastAPI Cheatsheet

Referenz für SnakePy & Gärtner

1. App Routing & Struktur

Router Definition

from fastapi import APIRouter, Depends, HTTPException

router = APIRouter(
    prefix="/api/v1/crumbs",
    tags=["crumbs"],
    responses={404: {"description": "Not found"}},
)

@router.get("/")
async def read_crumbs():
    return [{"name": "Krümel"}]

Main App Registration

# app/main.py
from app.routers import crumb_router

app.include_router(crumb_router.router)

2. Request Handling

Path & Query Parameters

# GET /items/42?q=searchterm
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
    return {"item_id": item_id, "q": q}

Request Body (Pydantic)

from pydantic import BaseModel

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

@app.post("/items/")
async def create_item(item: Item):
    return item

3. Dependency Injection

Database Session

from fastapi import Depends
from sqlalchemy.orm import Session
from app.deps import get_db

@app.get("/users/")
async def read_users(db: Session = Depends(get_db)):
    return db.query(User).all()

Current User (Auth)

from app.deps import get_current_user

@app.get("/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

4. Responses & Errors

JSON Response

# Automatisch via Return-Wert (dict/list/Pydantic Model)
return {"message": "Success"}

HTTP Errors

if not item:
    raise HTTPException(status_code=404, detail="Item not found")

Custom Status Code

from fastapi import status

@app.post("/", status_code=status.HTTP_201_CREATED)
async def create_item(item: Item):
    return item

5. Background Tasks

from fastapi import BackgroundTasks

def write_log(message: str):
    with open("log.txt", "a") as log:
        log.write(message)

@app.post("/send-notification/")
async def send_notification(email: str, background_tasks: BackgroundTasks):
    background_tasks.add_task(write_log, f"Notification sent to {email}")
    return {"message": "Notification sent"}