# Test Router 页面 from typing import Optional from fastapi import APIRouter, Query, Depends from fastapi.security import OAuth2PasswordBearer import aioredis from fastapi_plugins import depends_redis from fastapi_sqlalchemy import db from models.devices_place import DevicesPlace from pydantic_sqlalchemy import sqlalchemy_to_pydantic from pydantic import BaseModel router = APIRouter(prefix="/test") @router.get("/") def index(): return {"msg": "This is Index Page"} # ==================登录验证相关=================================== class User(BaseModel): username: str email: Optional[str] = None full_name: Optional[str] = None disabled: Optional[bool] = None def fake_decode_token(token): return User( username=token + "fakedecoded", email="john@example.com", full_name="John Doe" ) oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") async def get_current_user(token: str = Depends(oauth2_scheme)): print("get_current_user...") user = fake_decode_token(token) return user # 登录验证 @router.get("/users/me") async def read_users_me(current_user: User = Depends(get_current_user)): return current_user # 数据库查询 @router.get("/query") def query(mid: Optional[str] = Query(None, description='mid'), region_id: int = Query(..., description="区域Id"), limit: int = 20, page_count: int = 1): if mid is None: records = db.session.query(DevicesPlace).filter(DevicesPlace.region_id == region_id)\ .order_by(DevicesPlace.id).limit(limit).offset(limit*(page_count-1)).all() else: records = db.session.query(DevicesPlace).filter(DevicesPlace.mid == mid)\ .filter(DevicesPlace.region_id == region_id).order_by(DevicesPlace.id).limit(limit).offset(limit*(page_count-1)).all() return records # Redis 缓存查询 @router.get("/ping") async def ping(cache: aioredis.Redis = Depends(depends_redis)): return dict(ping=await cache.ping())