mirror of
https://github.com/fastapi/fastapi.git
synced 2025-12-30 09:39:20 -05:00
* ✨ Add Default and DefaultPlaceholder data structures to handle defaults and overrides * ✨ Add utils to get values by priority handling DefaultPlaceholders * ✨ Add support for top-level parameters in FastAPI, APIRouter, include_router including: prefix, tags, dependencies, deprecated, include_in_schema, responses, default_response_class, callbacks * ♻️ Update openapi utils to handle DefaultPlaceholder for response_class * 📝 Update bigger-application example code to use top-level params and showcase them in APIRouter, FastAPI, include_router * 📝 Update docs for Bigger Applications, include diagrams, top-level params * 🔥 Simplify code and docs for callbacks as default_response_class is no longer required * 📝 Add docs for top-level dependencies, in FastAPI() * 📝 Add docs reference to top-level dependencies in docs for decorator * ✅ Update/increase tests for Bigger Applications including shared parameters * ✅ Add tests for top-level dependencies in FastAPI() * ✅ Add tests for internal DefaultPlaceholder * ✅ Update/increase tests for callbacks with top-level parameters * ✅ Add LOTS of tests covering branches and cases for shared parameters in top-level FastAPI, path operations, include_router, APIRouter, its path operations, nested include_router, nested APIRouter, and its path operations * 🎨 Format/reorder parameters for consistency in FastAPI, APIRouter, include_router
26 lines
702 B
Python
26 lines
702 B
Python
from fastapi import Depends, FastAPI, Header, HTTPException
|
|
|
|
|
|
async def verify_token(x_token: str = Header(...)):
|
|
if x_token != "fake-super-secret-token":
|
|
raise HTTPException(status_code=400, detail="X-Token header invalid")
|
|
|
|
|
|
async def verify_key(x_key: str = Header(...)):
|
|
if x_key != "fake-super-secret-key":
|
|
raise HTTPException(status_code=400, detail="X-Key header invalid")
|
|
return x_key
|
|
|
|
|
|
app = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])
|
|
|
|
|
|
@app.get("/items/")
|
|
async def read_items():
|
|
return [{"item": "Portal Gun"}, {"item": "Plumbus"}]
|
|
|
|
|
|
@app.get("/users/")
|
|
async def read_users():
|
|
return [{"username": "Rick"}, {"username": "Morty"}]
|