Cursor rules for building high-performance APIs with FastAPI, including async patterns and Pydantic.
.cursorrules in your project rootYou are an expert Python developer specializing in FastAPI.
## Project Structure
```
src/
├── api/
│ ├── __init__.py
│ ├── deps.py # Dependencies
│ └── routes/
│ ├── __init__.py
│ ├── users.py
│ └── posts.py
├── core/
│ ├── __init__.py
│ ├── config.py # Settings
│ └── security.py # Auth utilities
├── models/
│ ├── __init__.py
│ └── user.py # Pydantic models
├── db/
│ ├── __init__.py
│ └── session.py # Database session
├── services/
│ └── user_service.py # Business logic
└── main.py # App entry point
```
## Pydantic Models
```python
from pydantic import BaseModel, EmailStr, Field
from datetime import datetime
from typing import Optional
class UserBase(BaseModel):
email: EmailStr
name: str = Field(..., min_length=1, max_length=100)
class UserCreate(UserBase):
password: str = Field(..., min_length=8)
class UserUpdate(BaseModel):
email: Optional[EmailStr] = None
name: Optional[str] = Field(None, min_length=1, max_length=100)
class UserResponse(UserBase):
id: str
created_at: datetime
class Config:
from_attributes = True
```
## Route Handlers
```python
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
router = APIRouter(prefix="/users", tags=["users"])
@router.post("/", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
async def create_user(
user_data: UserCreate,
db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_admin_user),
):
"""Create a new user."""
existing = await user_service.get_by_email(db, user_data.email)
if existing:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Email already registered"
)
user = await user_service.create(db, user_data)
return user
@router.get("/{user_id}", response_model=UserResponse)
async def get_user(
user_id: str,
db: AsyncSession = Depends(get_db),
):
"""Get user by ID."""
user = await user_service.get(db, user_id)
if not user:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="User not found"
)
return user
```
## Async Database
```python
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
engine = create_async_engine(
settings.DATABASE_URL,
echo=settings.DEBUG,
pool_size=5,
max_overflow=10,
)
async_session = sessionmaker(
engine, class_=AsyncSession, expire_on_commit=False
)
async def get_db() -> AsyncGenerator[AsyncSession, None]:
async with async_session() as session:
try:
yield session
await session.commit()
except Exception:
await session.rollback()
raise
```
## Error Handling
```python
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse
app = FastAPI()
class AppException(Exception):
def __init__(self, status_code: int, detail: str):
self.status_code = status_code
self.detail = detail
@app.exception_handler(AppException)
async def app_exception_handler(request: Request, exc: AppException):
return JSONResponse(
status_code=exc.status_code,
content={"error": exc.detail}
)
```Comprehensive Cursor rules for Next.js 14+ with App Router, including routing, layouts, and API patterns.
Cursor rules for TypeScript with strict type checking, advanced patterns, and best practices.
Cursor rules for Tailwind CSS development with responsive design, custom components, and dark mode.
Cursor
backend
AI coding rules customize how Cursor generates and refactors code for your project. Follow these steps to install Python FastAPI Development.
.cursor/rules, for Windsurf use .windsurfrulesComprehensive Cursor rules for Next.js 14+ with App Router, including routing, layouts, and API patterns.
Cursor rules for TypeScript with strict type checking, advanced patterns, and best practices.
Cursor rules for Tailwind CSS development with responsive design, custom components, and dark mode.