python-backend

安装量: 751
排名: #1633

安装

npx skills add https://github.com/jiatastic/open-python-skills --skill 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

返回排行榜