FastAPI Templates
This skill provides production-ready templates and scaffolding patterns for FastAPI applications.
When to Use
- Starting a new FastAPI service or project.
- Adding standard components (Auth, DB, Logging) to an existing app.
- Standardizing project structure across the team.
Project Structure Template
Recommended structure for scalable FastAPI apps:
src/
├── api/
│ ├── v1/
│ │ ├── endpoints/ # Route handlers
│ │ └── api.py # Router aggregation
│ └── deps.py # Dependencies (get_current_user, etc.)
├── core/
│ ├── config.py # Pydantic BaseSettings
│ └── security.py # JWT & Password hashing
├── db/
│ ├── models/ # SQLAlchemy models
│ ├── session.py # DB engine and session factory
│ └── base.py # Import all models here
├── schemas/ # Pydantic models (Request/Response)
├── services/ # Business logic
└── main.py # App entrypointCode Templates
1. Standard API Endpoint
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from src.api import deps
from src.schemas.item import ItemCreate, Item
from src.services import item_service
router = APIRouter()
@router.post("/", response_model=Item)
async def create_item(
item_in: ItemCreate,
db: AsyncSession = Depends(deps.get_db),
current_user = Depends(deps.get_current_user),
) -> Item:
"""
Create a new item.
"""
return await item_service.create(db, obj_in=item_in, owner_id=current_user.id)2. Pydantic Settings
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
PROJECT_NAME: str = "FastAPI App"
DATABASE_URL: str
SECRET_KEY: str
class Config:
case_sensitive = True
env_file = ".env"
settings = Settings()3. SQLAlchemy Async Model
from sqlalchemy import Column, Integer, String
from src.db.base_class import Base
class Item(Base):
id = Column(Integer, primary_key=True, index=True)
title = Column(String, index=True)
description = Column(String, nullable=True)