fastapi-template/api/test.py

66 lines
1.8 KiB
Python

# 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())