python-backend

jiatastic/open-python-skills · updated Apr 8, 2026

$npx skills add https://github.com/jiatastic/open-python-skills --skill python-backend
0 commentsdiscussion
summary

Production-ready Python backend patterns for FastAPI, SQLAlchemy, and Upstash integrations.

  • Covers async-first REST API development with FastAPI, including dependency injection, Pydantic validation, and structured project organization
  • Implements authentication patterns for JWT/OAuth2, password hashing, CORS, and API key management
  • Provides SQLAlchemy async database setup with transactions, eager loading, and migration strategies
  • Includes Redis/Upstash caching, rate limiting with s
skill.md

python-backend

Production-ready Python backend patterns for FastAPI, SQLAlchemy, and Upstash.

When to Use This Skill

  • Building REST APIs with FastAPI
  • Implementing JWT/OAuth2 authentication
  • Setting up SQLAlchemy async databases
  • Integrating Redis/Upstash caching and rate limiting
  • Refactoring AI-generated Python code
  • Designing API patterns and project structure

Core Principles

  1. Async-first - Use async/await for I/O operations
  2. Type everything - Pydantic models for validation
  3. Dependency injection - Use FastAPI's Depends()
  4. Fail fast - Validate early, use HTTPException
  5. Security by default - Never trust user input

Quick Patterns

Project Structure

src/
├── auth/
│   ├── router.py      # endpoints
│   ├── schemas.py     # pydantic models
│   ├── models.py      # db models
│   ├── service.py     # business logic
│   └── dependencies.py
├── posts/
│   └── ...
├── config.py
├── database.py
└── main.py

Async Routes

# BAD - blocks event loop
@router.get("/")
async def bad():
    time.sleep(10)  # Blocking!

# GOOD - runs in threadpool
@router.get("/")
def good():
    time.sleep(10)  # OK in sync function

# BEST - non-blocking
@router.get("/")
async def best():
    await asyncio.sleep(10)  # Non-blocking

Pydantic Validation

from pydantic import BaseModel, EmailStr, Field

class UserCreate(BaseModel):
    email: EmailStr
    username: str = Field(min_length=3, max_length=50, pattern="^[a-zA-Z0-9_]+$")
    age: int = Field(ge=18)

Dependency Injection

async def get_current_user(token: str = Depends(oauth2_scheme)) -> User:
    payload = decode_token(token)
    user = await get_user(payload["sub"])
    if not user:
        raise HTTPException(401, "User not found")
    return user

@router.get("/me")
async def get_me(user: User = Depends(get_current_user)):
    return user

SQLAlchemy Async

from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine

engine = create_async_engine(DATABASE_URL, pool_pre_ping=True)
SessionLocal = async_sessionmaker(engine, expire_on_commit=False)

async def get_session() -> AsyncGenerator[AsyncSession, None]:
    async with SessionLocal() as session:
        yield session

Redis Caching

from upstash_redis import Redis

redis = Redis.from_env()

@app.get("/data/{id}")
def get_data(id: str):
    cached = redis.get(f"data:{id}")
    if cached:
        return cached
    data = fetch_from_db(id)
    redis.setex(f"data:{id}", 600, data)
    return data

Rate Limiting

from upstash_ratelimit import Ratelimit, SlidingWindow

ratelimit = Ratelimit(
    redis=Redis.from_env(),
    limiter=SlidingWindow(max_requests=10, window=60),
)

@app.get("/api/resource")
def protected(request: Request):
    result = ratelimit.limit(request.client.host)
    if not result.allowed:
        raise HTTPException(429, "Rate limit exceeded")
    return {"data": "..."}

Reference Documents

For detailed patterns, see:

Document Content
references/fastapi_patterns.md Project structure, async, Pydantic, dependencies, testing
references/security_patterns.md JWT, OAuth2, password hashing, CORS, API keys
references/database_patterns.md SQLAlchemy async, transactions, eager loading, migrations
references/upstash_patterns.md Redis, rate limiting, QStash background jobs

Resources

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.473 reviews
  • Ishan Chen· Dec 28, 2024

    python-backend reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Aditi Diallo· Dec 20, 2024

    Keeps context tight: python-backend is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Chen Kapoor· Dec 16, 2024

    We added python-backend from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Noor Anderson· Dec 16, 2024

    python-backend fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Dhruvi Jain· Dec 4, 2024

    I recommend python-backend for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • Charlotte Bhatia· Dec 4, 2024

    We added python-backend from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Oshnikdeep· Nov 23, 2024

    Solid pick for teams standardizing on skills: python-backend is focused, and the summary matches what you get after install.

  • Charlotte Ghosh· Nov 23, 2024

    python-backend fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Mei Reddy· Nov 19, 2024

    python-backend has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Rahul Santra· Nov 15, 2024

    Useful defaults in python-backend — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

showing 1-10 of 73

1 / 8