Great — here is the complete ready-to-run folder structure for all 12 FastAPI modules, including:
✅ __init__.py (so Python treats folders as packages)
✅ main.py for every module
✅ A root-level requirements.txt
✅ Windows (.bat) and Linux/Mac (.sh) run scripts
✅ A unified recommended project layout
If you want, I can also fill every module with full working code exactly matching the 12-hour tutorial content.
✅ FASTAPI 12-Module Project — Full Folder Structure
fastapi-12hr/
│
├── requirements.txt
├── run_module.bat
├── run_module.sh
├── README.md
│
├── module1/
│ ├── __init__.py
│ └── main.py
│
├── module2/
│ ├── __init__.py
│ └── main.py
│
├── module3/
│ ├── __init__.py
│ └── main.py
│
├── module4/
│ ├── __init__.py
│ └── main.py
│
├── module5/
│ ├── __init__.py
│ └── main.py
│
├── module6/
│ ├── __init__.py
│ ├── main.py
│ ├── models.py
│ └── db_init.py
│
├── module7/
│ ├── __init__.py
│ ├── main.py
│ ├── auth.py
│ └── users.py
│
├── module8/
│ ├── __init__.py
│ └── main.py
│
├── module9/
│ ├── __init__.py
│ ├── main.py
│ └── test_main.py
│
├── module10/
│ ├── __init__.py
│ └── main.py
│
├── module11/
│ ├── __init__.py
│ ├── main.py
│ ├── models.py
│ ├── schemas.py
│ ├── crud.py
│ └── auth.py
│
└── module12/
├── __init__.py
└── main.py
📌 Root Files
requirements.txt
fastapi
uvicorn[standard]
pydantic
sqlmodel
sqlalchemy
aiosqlite
python-jose[bcrypt]
passlib[bcrypt]
pytest
httpx
run_module.bat (Windows)
@echo off
SET MODULE=%1
IF "%MODULE%"=="" (
echo Usage: run_module module2
exit /b
)
uvicorn %MODULE%.main:app --reload
Usage:
run_module module2
run_module.sh (Linux / macOS)
#!/bin/bash
MODULE=$1
if [ -z "$MODULE" ]; then
echo "Usage: ./run_module.sh module2"
exit 1
fi
uvicorn $MODULE.main:app --reload
Make executable:
chmod +x run_module.sh
Run:
./run_module.sh module2
📌 Starter Code for Each Module
Below is minimal working code for every module.
I can replace each one with full detailed code from the tutorial if you want.
module1/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"message": "Hello, FastAPI Module 1!"}
module2/main.py
(Your original module — fixed)
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
tags: list[str] = []
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
@app.post("/items/")
def create_item(item: Item):
return {"created": item}
module3/main.py
from fastapi import FastAPI
from pydantic import BaseModel, validator
app = FastAPI()
class User(BaseModel):
username: str
age: int
@validator("age")
def validate_age(cls, v):
if v <= 0:
raise ValueError("Age must be positive")
return v
@app.post("/user")
def add_user(user: User):
return user
🧱 I won’t paste all modules unless you request it (to avoid making this message too long).
FASTAPI — 12‑Hour Hands‑On Tutorial (12 Modules) — FULL CODE
This document contains the 12‑module tutorial with full starter code for every module. Each module includes a working main.py and any supporting files required to run the example. Use the root requirements.txt and the provided run_module.sh / run_module.bat to run any module.
Project layout (ready)
fastapi-12hr/ requirements.txt run_module.sh run_module.bat README.md module1/ __init__.py main.py module2/ __init__.py main.py module3/ __init__.py main.py module4/ __init__.py main.py module5/ __init__.py main.py module6/ __init__.py main.py models.py db_init.py module7/ __init__.py main.py auth.py users.py module8/ __init__.py main.py module9/ __init__.py main.py test_main.py module10/ __init__.py main.py module11/ __init__.py main.py models.py schemas.py crud.py auth.py module12/ __init__.py main.py
requirements.txt
fastapiuvicorn[standard]pydanticsqlmodelsqlalchemyaiosqlitepython-jose[bcrypt]passlib[bcrypt]pytesthttpx
run_module.sh
#!/bin/bashMODULE=$1if [ -z "$MODULE" ]; then echo "Usage: ./run_module.sh module2" exit 1fiuvicorn $MODULE.main:app --reload
Make executable: chmod +x run_module.sh
run_module.bat
@echo offSET MODULE=%1IF "%MODULE%"=="" ( echo Usage: run_module module2 exit /b)uvicorn %MODULE%.main:app --reload
Module code (full)
Note: For each module you can run ./run_module.sh moduleX (or run_module moduleX on Windows) from the repository root.
Note: For each module you can run ./run_module.sh moduleX (or run_module moduleX on Windows) from the repository root.
module1 — Basics
module1/main.py
module2 — Path params, query params, request body
module2/main.py
module3 — Data validation with Pydantic
module3/main.py
module4 — Dependency injection & simple API key security
module4/main.py
module5 — Background tasks, startup/shutdown events, middleware
module5/main.py
module6 — Database integration (SQLModel + SQLite)
module6/models.py
module6/db_init.py
module6/main.py
module7 — Authentication (OAuth2 password flow + JWT sketch)
module7/users.py
module7/auth.py
module7/main.py
Note: This module uses a simplified in-memory store and a placeholder bcrypt hash. For real apps, use a DB and properly hash passwords.
No comments:
Post a Comment