fix: 重置返回值格式

This commit is contained in:
chenwj 2023-01-14 16:17:20 +08:00
parent 78ff7c60d4
commit 6742916119
4 changed files with 59 additions and 20 deletions

View File

@ -5,12 +5,11 @@ import aioredis
from fastapi import APIRouter, Depends, Query
from fastapi.security import OAuth2PasswordBearer
from fastapi_plugins import depends_redis
from fastapi_sqlalchemy import db
from pydantic import BaseModel
from pydantic_sqlalchemy import sqlalchemy_to_pydantic
from src.biz.test import get_user_by_id
from src.models.devices_place import DevicesPlace
from biz.example import get_user_by_id
from dtos import response
from dtos.example import UserListPagesResult, UserListResult
router = APIRouter(prefix="/test")
@ -51,20 +50,20 @@ async def get_user():
async def read_users_me(current_user: User = Depends(get_current_user)):
return current_user
@router.get('/users', response_model=UserListResult)
def get_user_list():
data = [{"id": 12, "user_name": "lala"}]
res = response(data=data, message="Ok!")
return res
# 数据库查询
@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
@router.get('/user_list_pages', response_model=UserListPagesResult)
async def get_user_list_pages(page: int = Query(..., description="当前页码"),
limit: int = 20):
items = [{"id": 12, "user_name": "lala"}]
data = {"totalRecords": limit, "totalPages": 0, "currentPage": page, "items": items}
res = response(data=data, message="Ok!")
return res
# Redis 缓存查询

View File

@ -3,24 +3,38 @@ from typing import Any, List, Union
from pydantic import BaseModel
def response(status=200, message="", data=None, err_code=0, err_detail="", target_url=""):
result = {
"result": data,
"code": status,
"error": {
"code": status if not err_code and status != 200 else err_code,
"message": message,
"details": err_detail if err_detail else message
}
}
return result
class ErrorModel(BaseModel):
code: int = 200
message: str = ""
details: str = ""
class PageItemModel(BaseModel):
totalRecords: int = 0
totalPages: int = 0
currentPage: int = 0
items: List[Any] = []
items: List[BaseModel] = []
class BaseResponse(BaseModel):
result: Union[dict, list, Any] = None
code: int = 200
error: ErrorModel = ErrorModel()
error: ErrorModel
class ListResponse(BaseResponse):
result: PageItemModel = PageItemModel()
result: PageItemModel
class SuccessResponse(BaseResponse):
result: dict = dict(success=True)

26
src/dtos/example.py Normal file
View File

@ -0,0 +1,26 @@
from typing import List
from pydantic import Field
from src.dtos import BaseModel, BaseResponse, ListResponse, PageItemModel
class UserDto(BaseModel):
id: int = Field(None, alias='id', description='id')
userName: str = Field(None, description='用户名')
class Config:
orm_mode = True
allow_population_by_field_name = True
class UserListPagesItem(PageItemModel):
items: List[UserDto]
class UserListPagesResult(ListResponse):
result: UserListPagesItem
class UserListResult(BaseResponse):
result: List[UserDto]