python-backend

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

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "python-backend" with this command: npx skills add jiatastic/open-python-skills/jiatastic-open-python-skills-python-backend

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

  • Async-first - Use async/await for I/O operations

  • Type everything - Pydantic models for validation

  • Dependency injection - Use FastAPI's Depends()

  • Fail fast - Validate early, use HTTPException

  • 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

  • FastAPI Documentation

  • SQLAlchemy 2.0 Documentation

  • Upstash Documentation

  • Pydantic Documentation

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

Miaoji Asin Clinic Pro

亚马逊ASIN诊所Pro版,90天行动计划+竞品对标+季节性优化日历。 从合规度、广告度、评论度、视觉度、内容度五维升级为可执行的长期作战方案。 基础功能可使用 miaoji-asin-clinic 免费版。

Registry SourceRecently Updated
Coding

wechat-publish-pro

Pure Python tool to convert Markdown to styled HTML and publish articles to WeChat official account drafts with AI-based content refinement and theme support.

Registry SourceRecently Updated
Coding

Miaoji Asin Clinic

基于ASIN和品类,快速诊断亚马逊Listing五维健康指数并智能排序修复优先级,提供详细分析与个性化修复方案。

Registry SourceRecently Updated
Coding

Toonany

A Claude Code skill for creating AI-generated short dramas (漫剧) from novels and stories. Use when user mentions "漫剧创作", "小说转剧本", "分镜生成", "短剧制作", "故事线生成", "大纲...

Registry SourceRecently Updated