溫馨提示:
讀完本文大約需要 3 分鐘末早;
這是一篇技術(shù)類文章烟馅;
需要對(duì)fastapi
有一定的了解;
代碼部分橫屏觀看更佳荐吉。
前言
最近在使用 FastApi
為后端框架進(jìn)行一個(gè)項(xiàng)目的開發(fā)焙糟,在 FastApi
使用過程中,在寫返回?cái)?shù)據(jù)列表的時(shí)候样屠,不知道怎么處理穿撮,特此記錄一下,以便以后查閱痪欲。
編寫列表接口時(shí)候整體流程
- 編寫
schema
, 以便對(duì)返回的數(shù)據(jù)進(jìn)行序列化處理 - 編寫
crud
, 進(jìn)行業(yè)務(wù)處理悦穿,跟數(shù)據(jù)庫進(jìn)行交互 - 編寫入口函數(shù),定義 路由
url
以及入?yún)?/code>
1. 編寫 schema
from pydantic import BaseModel
class CaseSchemaDetail(BaseModel):
id: int
name: str
case_level: str
marks: str = None
remark: str = None
module_id: int
create_time: datetime
update_time: datetime
class Config:
orm_mode = True
這里先導(dǎo)出 pydantic
的類 BaseModel
业踢,再繼承 BaseModel
栗柒。
書寫格式舉例子:marks: str = None
- marks: 需要展示的字段的名字,跟對(duì)應(yīng)的
model
的名字一致 - str:字段的類型
- None:字段的默認(rèn)值
2. 編寫 crud
def get_cases(db: Session):
"""
查詢用例列表
:param db:
:return:
"""
return db.query(Case).all()
這里比較簡(jiǎn)單知举,直接進(jìn)行查詢就可以啦
3. 編寫入口函數(shù)
@app.get("/cases", response_model=Page[case_schema.CaseSchemaDetail])
async def read_cases(db: SessionLocal = Depends(get_db)):
"""
查詢用例列表
:param db: db session
:return:
"""
return paginate(case_crud.get_cases(db))
在 response_model
這里使用了 Page
對(duì)返回結(jié)果進(jìn)行處理瞬沦,返回結(jié)果是這樣的:
{
"items": [
{
"id": 0,
"name": "string",
"case_level": "string",
"marks": "string",
"remark": "string",
"module_id": 0,
"create_time": "2022-08-21T02:42:29.209Z",
"update_time": "2022-08-21T02:42:29.209Z"
}
],
"total": 0,
"page": 1,
"size": 1
}
后記:返回字段中,其中格式是 list 的字段怎么處理雇锡,即多層嵌套
在 schema
類里面進(jìn)行處理就好啦:
from typing import List
class CaseSchemaDetail(BaseModel):
id: int
name: str
case_level: str
marks: str = None
remark: str = None
module_id: int
modules: List[ModuleSchemaDetail] = []
create_time: datetime
update_time: datetime
class Config:
orm_mode = True
這里新添加了一個(gè)字段 modules
, 這個(gè)字段的類型聲明為 List
, list
里面的內(nèi)容為:ModuleSchemaDetail
, 默認(rèn)為 []
返回結(jié)果是這樣的:
{
"items": [
{
"id": 0,
"name": "string",
"case_level": "string",
"marks": "string",
"remark": "string",
"module_id": 0,
"modules": [
{
"id": 0,
"name": "string",
"remark": "string",
"create_time": "2022-08-21T02:46:37.003Z",
"update_time": "2022-08-21T02:46:37.003Z"
}
],
"create_time": "2022-08-21T02:46:37.003Z",
"update_time": "2022-08-21T02:46:37.003Z"
}
],
"total": 0,
"page": 1,
"size": 1
}
每日踩一坑逛钻,生活更輕松。
本期分享就到這里啦锰提。祝君在測(cè)開之路上越走越順曙痘,越走越遠(yuǎn)。
gzh:測(cè)開工程師的煩惱