Fastapi学习第二天
·
from fastapi import FastAPI, Query
app = FastAPI()
# 需求: 查询新闻 -> 分页, skip: 跳过的记录数, limit: 返回的记录数:默认10
@app.get("/news/new_list")
async def get_news(
skip: int = Query(0, description="skip: 跳过的记录数", lt=100),
limit: int = 10
):
return {"skip": skip, "limit": limit}
"""
查询参数出现在什么位置?
不需要在路径上定义参数
URL?之后, k1=v1&k2=v2
如何为查询参数添加类型注解
Python原生注解和Query注解
Path参数:
...:必填
gt/ge:大于/大于等于
lt/le:小于/小于等于
description:描述
min_length/max_length:长度限制
"""
# 需求: 设计接口查询图书,要求携带两个查询参数:图书分类和价格
"""
参数具体要求:
图书分类:默认值为 Python开发,长度限制 5~255
价格:限制大小范围50~100
"""
@app.get("/books/book_list")
async def get_book(
sort: str = Query("Python开发", min_length=5, max_length=255,description="图书分类"),
price: int = Query(...,gt=50, lt=100,description="图书价格")
):
return {"sort": sort, "price": price}
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
class User(BaseModel): # 继承BaseModel类
username: str
password: str
@app.post("/register")
async def register(user: User):
return user
"""
请求体
位置:HTTP请求的消息体(body)中
作用:创建、更新资源携带大量数据,如:JSON
方法:POST,PUT等
请求体:实际要发送的数据内容
在HTTP协议中,一个完整的请求由三部分组成:
1,请求行,2,请求头,3,请求体
"""
# 需求:设计接口新增图书,图书信息包含: 书名,作者,出版社,售价
class Book(BaseModel):
book_name:str
author:str
publisher:str
price:int
@app.post('/add_book')
async def add_book(book: Book):
return book
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
# 注册:用户名和密码
class User(BaseModel):
username: str = Field(default="张三", min_length=2, max_length=10, description="用户名,长度要求2-10个字")
password: str = Field(default="123456", min_length=3, max_length=20)
@app.post("/register")
async def register(user: User):
return user
"""
请求体参数 - 类型注解 Field
导入pydantic的Field函数
from pydantic import BaseModel,Field
... : 必填
gt/ge : 大于/大于等于
lt/le : 小于/小于等于
default:默认值
description : 描述
min_length/max_length 长度限制
"""
# 需求: 设计接口新增图书,图书信息包含 : 书名、作者、出版社、售价
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
"""
具体要求如下:
书名:不能为空;长度2~20
作者:长度2~10
出版社:默认值“黑马出版社”
售价:不能为空;价格大于0元
"""
@app.get("/")
async def root():
return {"message": "Hello World,我爱你"}
class Book(BaseModel):
book_name: str = Field(..., min_length=2, max_length=20)
author: str = Field(..., min_length=2, max_length=10)
publisher: str = Field(default="黑马出版社")
price: int = Field(..., gt=0)
@app.post("/push_book")
async def add_book(book: Book):
return book
from fastapi import FastAPI
from fastapi.responses import HTMLResponse,FileResponse
from pydantic import BaseModel
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
# 接口 -> 响应HTML代码
@app.get("/html", response_class=HTMLResponse) # 装饰器设置响应类
async def get_html():
return "<h1>这是一级标题</h1>"
# 接口 -> 返回一张图片内容
@app.get('/file')
async def get_file():
path = './R-C.jpg'
return FileResponse(path) # 返回响应对象
# response_model:定义响应数据格式
class News(BaseModel):
id:int
title:str
content:str
@app.get("/news/{id}",response_model=News)
async def get_news(id: int):
return {
"id":id,
"title":f"这是第{id}本书",
"content":"这是一本好书"
}
from fastapi import FastAPI,HTTPException
# 实例化对象
app = FastAPI()
@app.get("/")
async def root():
return {"message":"Hello World"}
@app.get("/news/{id}")
async def get_news(id: int):
id_list = [1,2,3,4,5,6]
if id not in id_list:
raise HTTPException(status_code=404,detail="你查询的id不存在")
return {"id":f"你查询的{id}存在"}
from fastapi import FastAPI
app = FastAPI()
# 中间件
@app.middleware("http")
async def middleware1(requests, call_next):
print("开始执行中间件1")
response = await call_next(requests)
print("中间件1执行结束")
return response
# 中间件
@app.middleware("http")
async def middleware2(requests, call_next):
print("开始执行中间件2")
response = await call_next(requests)
print("中间件2执行结束")
return response
@app.get("/")
async def root():
return {"message": "Hello World"}
from fastapi import FastAPI, Query, Depends
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
# 依赖注入:就是很多的函数会用到同一个方法
async def common_parameters(
skip: int = Query(0, ge=0),
limit: int = Query(10, le=100)
):
return {"skip": skip, "limit": limit}
@app.get("/news/news_list")
async def get_news(common=Depends(common_parameters)):
return common
@app.get("/user/user_list")
async def get_news(common=Depends(common_parameters)):
return {"message": "Hello World"}
"""
FastAPI中,依赖注入系统有什么用?
抽取可复用的组建,实现代码复用,解耦且可轻松替换依赖项进行测试
怎么使用依赖注入系统?
创建依赖项 -> 导入Depends -> 声明依赖项
"""
更多推荐
所有评论(0)