2.2 KiB
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"}