FastApi
1from fastapi import FastAPI, Depends, HTTPException, APIRouter2from starlette.requests import Request3
4app = FastAPI()5
6# yield
7async def get_async_session():8print("Получение сессии")9session = "session"10yield session11print("Уничтожение сессии")12
13
14@app.get("/items")15async def get_items(session=Depends(get_async_session)):16print(session)17return [{"id": 1}]18
19
20# parameters
21def pagination_params(limit: int = 10, skip: int = 0):22return {"limit": limit, "skip": skip}23
24
25@app.get("/subjects")26async def get_subjects(pagination_params: dict = Depends(pagination_params)):27return pagination_params28
29
30# class
31class Paginator:32def __init__(self, limit: int = 10, skip: int = 0):33self.limit = limit34self.skip = skip35
36
37@app.get("/subjects_class")38async def get_subjects_class(pagination_params: Paginator = Depends()):39return pagination_params40
41
42# dependencies = [Depends(...)]
43# class call
44# request
45
46class AuthGuard:47def __init__(self, name: str):48self.name = name49
50def __call__(self, request: Request):51if "super_cookie" not in request.cookies:52raise HTTPException(status_code=403, detail="Запрещено")53# проверяем что в куках есть инфа о наличии прав пользователя54return True55
56
57auth_guard_payments = AuthGuard("payments")58
59
60router = APIRouter(61dependencies=[Depends(auth_guard_payments)]62)
63
64
65@app.get("/payments")66def get_payments():67return "my payments...."68
69