70 lines
2.0 KiB
Python
70 lines
2.0 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")
|
|
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())
|
|
|