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 -> 声明依赖项
"""

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐