# 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", response_model=sqlalchemy_to_pydantic(DevicesPlace)) def query(mid: str = Query(..., description='mid'), region_id: Optional[int] = Query(None, description="区域Id")): if region_id is None: record = db.session.query(DevicesPlace).filter(DevicesPlace.mid == mid).first() else: record = db.session.query(DevicesPlace).filter(DevicesPlace.mid == mid)\ .filter(DevicesPlace.region_id == region_id).first() return record # Redis 缓存查询 @router.get("/ping") async def ping(cache: aioredis.Redis = Depends(depends_redis)): return dict(ping=await cache.ping())