fastapi(十四)-路径操作配置-json兼容编码

在路径操作装饰器上可以传入几个参数。
响应状态码
在路径操作中可以定义status_code用于响应中,你可以直接传入整数code,
如果不记得每个数字代表什么,可以在状态中加入简短得描述。
eg:

from typing import Set

from fastapi import FastAPI, status
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
    tags: Set[str] = []


@app.post("/items/", response_model=Item, status_code=status.HTTP_201_CREATED)
async def create_item(*, item: Item):
    return item

Tags
你也可以在路径操作中添加标签,一般在标签中传入list或者str,(一般使用一个str)

from typing import Set

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
    tags: Set[str] = []


@app.post("/items/", response_model=Item, tags=["items"])
async def create_item(*, item: Item):
    return item


@app.get("/items/", tags=["items"])
async def read_items():
    return [{
     "name": "Foo", "price": 42}]


@app.get("/users/", tags=["users"])
async def read_users():
    return [{
     "username": "johndoe"}]

这些标签将用于openapi schema 以及自动文档中对api接口得分类。
summary and description

from typing import Set
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
    tags: Set[str] = []
@app.post(
    "/items/",
    response_model=Item,
    summary="Create an item",
    description="Create an item with all the information, name, description, price, tax and a set of unique tags",
)
async def create_item(*, item: Item):
    return item

description可以使用长字符串或者多行文本。用于docs中api接口描述。

Response description

参数response_description用于响应描述。

from typing import Set

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
    tags: Set[str] = []


@app.post(
    "/items/",
    response_model=Item,
    summary="Create an item",
    response_description="The created item",
)
async def create_item(*, item: Item):
    """
    Create an item with all the information:

    - **name**: each item must have a name
    - **description**: a long description
    - **price**: required
    - **tax**: if the item doesn't have tax, you can omit this
    - **tags**: a set of unique tag strings for this item
    """
    return item

停用一个路径操作
如果你需要将路径操作标记为停用,但又不能删除它,可以将deprecated设置为Ture

from fastapi import FastAPI
app = FastAPI()
@app.get("/items/", tags=["items"])
async def read_items():
    return [{
     "name": "Foo", "price": 42}]
@app.get("/users/", tags=["users"])
async def read_users():
    return [{
     "username": "johndoe"}]
@app.get("/elements/", tags=["items"], deprecated=True)
async def read_elements():
    return [{
     "item_id": "Foo"}]

JSON编码
当你想将pydantic模型转化为json格式得时候,可以使用fastapi提供得jsonable_encoder()函数。
使用jsonable_encoder
想象一下你又一个数据库fake_db只接收json数据,但是它并不接收datetime对象,所以datetime对象就必须得转换为包含iso格式得数据字符串。
同样的,datebase不会接收pydantic模型,只接受dict。就可以使用jsonable_encoder。

from datetime import datetime

from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel

fake_db = {
     }


class Item(BaseModel):
    title: str
    timestamp: datetime
    description: str = None


app = FastAPI()


@app.put("/items/{id}")
def update_item(id: str, item: Item):
    json_compatible_item_data = jsonable_encoder(item)
    fake_db[id] = json_compatible_item_data

这个例子中,pydantic模型将会转换为dict,并且datetime将转换为str。

你可能感兴趣的:(python)