案例三
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import uvicorn
app = FastAPI()
html_content = """
<html>
<head>
<title>浏览器顶部的标题</title>
</head>
<body>
<h3>三酷猫海鲜店</h3>
<table border="1">
<tr>
<th> 品 名 </th>
<th> 数量 </th>
<th> 单位</th>
<th> 单价(元)</th>
</tr>
<tr>
<td>野生大黄鱼</td>
<td>20</td>
<td>斤</td>
<td>168</td>
</tr>
<tr>
<td>对虾</td>
<td>100</td>
<td>斤</td>
<td>48</td>
</tr>
<tr>
<td>比目鱼</td>
<td>200</td>
<td>斤</td>
<td>69</td>
</tr>
<tr>
<td>黄花鱼</td>
<td>500</td>
<td>斤</td>
<td>21</td>
</tr>
</table>
</body>
</html>
"""
@app.get("/html/", response_class=HTMLResponse)
async def read_items1():
return html_content
if __name__ == '__main__':
uvicorn.run(app=app)
实验三
from fastapi import FastAPI
import uvicorn
from typing import Optional
from pydantic import BaseModel
class FishBase(BaseModel):
name: str = '三纹鱼'
amount: int = 10
unit: str = '斤'
class CreateFish(FishBase):
price: float = 9.0
class Fish(FishBase):
pass
app = FastAPI()
@app.post("/additem/", response_model=Fish)
async def additem(name: str, fish: CreateFish):
return fish
if __name__ == "__main__":
uvicorn.run(app=app)
基础代码
from typing import Optional
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
email: str
full_name: Optional[str] = None
@app.post("/user/", response_model=UserIn)
async def create_user(user: UserIn):
return user
if __name__ == '__main__':
uvicorn.run(app=app)
from typing import Optional
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
email: str
full_name: Optional[str] = None
class UserOut(BaseModel):
username: str
email: str
full_name: Optional[str] = None
@app.post("/user/", response_model=UserOut)
async def create_user(user: UserIn):
return user
if __name__ == '__main__':
uvicorn.run(app=app)
from typing import List, Optional
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Data(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: float = 10.5
tags: List[str] = []
datas = {
"min": {"name": "最小化", "price": 50.2},
"max": {"name": "最大化", "description": "都有值", "price": 62, "tax": 20.2},
"same": {"name": "默认", "description": None, "price": 50.2, "tax": 10.5, "tags": []},
}
@app.get("/data/{data_id}",
response_model=Data,
response_model_exclude_unset=True
)
async def read_item(data_id: str):
return datas[data_id]
if __name__ == '__main__':
uvicorn.run(app=app)
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
phone: Optional[str]
email: Optional[str]
address: Optional[str]
class UserOut(BaseModel):
username: str
phone: Optional[str]
email: Optional[str]
address: Optional[str]
class UserDB(BaseModel):
username: str
password_md5: str
phone: Optional[str]
email: Optional[str]
address: Optional[str]
def get_md5(raw_password: str):
return "密码md5值" + raw_password
def save_user_logic(user_in: UserIn):
password_md5 = get_md5(user_in.password)
user_db = UserDB(**user_in.dict(), password_md5=password_md5)
print("此处应该是将user_db保存到数据库的操作代码")
return user_db
@app.post("/user/", response_model=UserOut)
async def create_user(user_in: UserIn):
user_saved = save_user_logic(user_in)
return user_saved
if __name__ == '__main__':
uvicorn.run(app=app)
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional
app = FastAPI()
class UserBase(BaseModel):
username: str
phone: Optional[str]
email: Optional[str]
address: Optional[str]
class UserIn(UserBase):
password: str
class UserOut(UserBase):
pass
class UserDB(UserBase):
password_md5: str
def get_md5(raw_password: str):
return "密码md5值" + raw_password
def save_user_logic(user_in: UserIn):
password_md5 = get_md5(user_in.password)
user_db = UserDB(**user_in.dict(), password_md5=password_md5)
print("此处应该是将user_db保存到数据库的操作代码")
return user_db
@app.post("/user/", response_model=UserOut)
async def create_user(user_in: UserIn):
user_saved = save_user_logic(user_in)
return user_saved
if __name__ == '__main__':
uvicorn.run(app=app)
from typing import Union
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class BaseItem(BaseModel):
description: str
type: str
class Cat(BaseItem):
type = "cat"
class Dog(BaseItem):
type = "dog"
color: str
items = {
"item1": {
"description": "三酷猫",
"type": "cat"
},
"item2": {
"description": "中华田园犬",
"type": "dog",
"color": "yellow",
},
}
@app.get("/items/{item_id}",
response_model=Union[Dog, Cat]
)
async def read_item(item_id: str):
return items[item_id]
if __name__ == '__main__':
uvicorn.run(app=app)
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse
import uvicorn
app = FastAPI()
@app.get("/", response_class=PlainTextResponse)
async def main():
return "Hello World"
if __name__ == '__main__':
uvicorn.run(app=app)
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import uvicorn
app = FastAPI()
html_content = """
<html>
<head>
<title>浏览器顶部的标题</title>
</head>
<body>
<h1>三酷猫</h1>
</body>
</html>
"""
@app.get("/html/", response_class=HTMLResponse)
async def read_items1():
return html_content
@app.get("/default/")
async def read_items2():
return HTMLResponse(content=html_content)
if __name__ == '__main__':
uvicorn.run(app=app)
from fastapi import FastAPI
from fastapi.responses import RedirectResponse
import uvicorn
app = FastAPI()
@app.get("/three")
async def read_three():
return RedirectResponse("https://github.com/threecoolcat")
if __name__ == '__main__':
uvicorn.run(app=app)
from datetime import datetime
from typing import Optional
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from pydantic import BaseModel
import uvicorn
class Item(BaseModel):
title: str
timestamp: datetime
description: Optional[str] = None
app = FastAPI()
@app.post("/item/")
def update_item(item: Item):
json_compatible_item_data = jsonable_encoder(item)
return JSONResponse(content=json_compatible_item_data)
if __name__ == '__main__':
uvicorn.run(app=app)
from fastapi import FastAPI, Response
from typing import Optional
import uvicorn
app = FastAPI()
@app.get("/document/")
def get_legacy_data(id: Optional[int] = None):
data = """<?xml version="1.0" encoding="utf-8" ?>
<Document>
<Header>
这里是页头
</Header>
<Body>
这里是内容
</Body>
<Footer>
这里是页脚
</Footer>
</Document>
"""
return Response(content=data, media_type="application/xml")
if __name__ == '__main__':
uvicorn.run(app=app)
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import uvicorn
some_file_path = "large-video-file.mp4"
app = FastAPI()
@app.get("/")
def main():
file_like = open(some_file_path, mode="rb")
return StreamingResponse(file_like, media_type="video/mp4")
if __name__ == '__main__':
uvicorn.run(app=app)
from fastapi import FastAPI
from fastapi.responses import FileResponse
import uvicorn
some_file_path = "large-video-file.mp4"
app = FastAPI()
@app.get("/")
async def main():
return FileResponse(some_file_path)
if __name__ == '__main__':
uvicorn.run(app=app)