Skip to main content

FastAPI project scaffolding tool

Project description

FastScaff

FastAPI project scaffolding tool - quickly generate standardized FastAPI project structures.

中文文档

Installation

pip install fastscaff

Commands

Create Project

fastscaff new myproject --orm sqlalchemy

Options:

  • --orm - ORM choice: sqlalchemy or tortoise (default: tortoise)
  • --output - Output directory (default: current directory)
  • --with-rbac - Include Casbin RBAC support
  • --with-celery - Include Celery task queue support
  • --force - Overwrite existing directory

Examples:

# Basic project with SQLAlchemy
fastscaff new myproject --orm sqlalchemy

# Full-featured project
fastscaff new myproject --orm sqlalchemy --with-celery --with-rbac

# Specify output directory
fastscaff new myproject --output /path/to/dir

Generate Models from Database

Generate ORM models by introspecting existing MySQL database tables:

cd myproject
fastscaff models --db-url "mysql://user:pass@localhost:3306/mydb"

Options:

  • --db-url - Database connection URL (required)
  • --orm - Target ORM: sqlalchemy or tortoise (auto-detected from requirements.txt)
  • --tables - Comma-separated table names (default: all tables)
  • --output - Output directory (default: current directory)

Examples:

# In project directory - ORM is auto-detected
cd myproject
fastscaff models --db-url "mysql://root:password@localhost:3306/mydb"

# Generate models for specific tables
fastscaff models --db-url "mysql://..." --tables user,order,product

# Explicitly specify ORM
fastscaff models --db-url "mysql://..." --orm tortoise

Generated models include:

  • Field type mapping
  • Primary keys and auto-increment
  • Indexes
  • Foreign key relationships
  • Table and column comments

Project Structure

myproject/
├── app/
│   ├── main.py              # Application entry point
│   ├── core/
│   │   ├── config.py        # Settings (env-based)
│   │   ├── database.py      # Database connection
│   │   ├── redis.py         # Redis client
│   │   ├── security.py      # Password hashing, JWT
│   │   ├── logger.py        # Structured logging
│   │   └── lifespan.py      # Startup/shutdown events
│   ├── api/v1/
│   │   ├── router.py        # API router
│   │   └── endpoints/       # Route handlers
│   ├── models/              # ORM models
│   ├── schemas/             # Pydantic schemas
│   ├── repositories/        # Data access layer
│   ├── services/            # Business logic layer
│   ├── middleware/          # Request/response middleware
│   ├── exceptions/          # Custom exceptions
│   └── utils/               # Utility functions
├── tests/
├── .env.example
├── Dockerfile
├── docker-compose.yml
├── Makefile
└── requirements.txt

Architecture

The generated project follows a layered architecture:

Layer Directory Responsibility
API api/ HTTP handling, request validation, response formatting
Service services/ Business logic, orchestration
Repository repositories/ Data access, database queries
Model models/ Database table definitions
Schema schemas/ Request/response data structures

Services are accessed via a singleton registry pattern:

from app.services import registry

user = await registry.user_service.get_user_by_id(user_id)

Built-in Features

Middleware

  • CORS handling
  • Request logging with trace ID
  • JWT authentication
  • Security headers
  • Request signing verification

Utilities

  • Snowflake ID generator
  • Rate limiter (Redis-based)
  • Cache decorator
  • Password hashing

Database

  • SQLite by default (zero configuration)
  • MySQL/PostgreSQL ready (just update DATABASE_URL)
  • Async database operations
  • Request-scoped sessions (SQLAlchemy)

Running the Project

cd myproject
pip install -r requirements.txt
make dev

The project runs immediately with SQLite - no database setup required.

Available make commands:

make dev          # Start development server
make test         # Run tests
make lint         # Run linter
make format       # Format code
make docker-up    # Start all services (Docker)
make docker-down  # Stop all services

If Celery is enabled:

make celery-worker  # Start Celery worker
make celery-beat    # Start Celery beat scheduler

Configuration

Configuration is managed via environment variables. Copy .env.example to .env:

# Application
ENV=dev
DEBUG=true
PORT=8000

# Database
DATABASE_URL=sqlite+aiosqlite:///./app.db
# DATABASE_URL=mysql+aiomysql://user:pass@localhost:3306/mydb

# Redis
REDIS_URL=redis://localhost:6379/0

# JWT
JWT_SECRET_KEY=your-secret-key
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30

# Celery (if enabled)
CELERY_BROKER_URL=redis://localhost:6379/1
CELERY_RESULT_BACKEND=redis://localhost:6379/1

Development

# Clone the repository
git clone https://github.com/lee-hangzhou/fastscaff.git
cd fastscaff

# Install in development mode
pip install -e ".[dev]"

# Run tests
pytest

# Code formatting
ruff check --fix .
ruff format .

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fastscaff-0.2.2.tar.gz (44.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastscaff-0.2.2-py3-none-any.whl (65.2 kB view details)

Uploaded Python 3

File details

Details for the file fastscaff-0.2.2.tar.gz.

File metadata

  • Download URL: fastscaff-0.2.2.tar.gz
  • Upload date:
  • Size: 44.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for fastscaff-0.2.2.tar.gz
Algorithm Hash digest
SHA256 5d94b05a5a5e45c75eb1807190c4f7bd4203e619385f7ab121469eb3e5e4a29c
MD5 4aaf5b2f3ad2e577cf40d82805e72baf
BLAKE2b-256 14b00165ef0e4980c646e439ec9540c207078eef5ceda0cc74814368458c6d44

See more details on using hashes here.

File details

Details for the file fastscaff-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: fastscaff-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 65.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for fastscaff-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5cf0f109b6c4b9059a554a45e1be12cdf168bc874a4c198395a8b43a87b3fac5
MD5 3f1234d6cfa006d307c7a5ae04b26631
BLAKE2b-256 99a5993d8ce30b44370557c46f6f15ea683b687b5c4b7f0538dba02ca1c3d14d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page