from fastapi import FastAPI, Query
from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field


app = FastAPI()


@app.get("/")
def index():
    return "Hello World!"


"""
终端启动: 
1. uvicorn 模块名:模块中的app名 --reload   默认是127.0.0.1:8000
例:uvicorn main:app --reload
2. 设置ip和端口:uvicorn 模块名:模块中的app名 --reload --host=ip地址 --port=端口号
例:uvicorn 01:app --reload --host=0.0.0.0 --port=8080
"""


# 1. 路径参数
# 普通路径参数
# @app.get("/book/{book_id}/")
# def book_detail(book_id):
#     return {"book_id": book_id}


# 路径参数指定类型
@app.get("/book/{book_id}/")
def book_detail(book_id: int):
    return {"book_id": book_id}


# 路径参数设置枚举值类
class GenderNum(str, Enum):
    male = "male"
    female = "female"


# 参数设置枚举值
@app.get("/gender/{gender_name}/")
def gender(gender_name: GenderNum):
    return {"gender_name": gender_name}


# 2. 查询参数
# Optional:可选参数
# 可以使Optional中指定的类型,也可以是None类型
# 如果不传会报错,需要设置等于None,这样就可以不传
# @app.get("/search/")
# def search(q: Optional[str] = None):
#     return {"msg": "查询参数为{}".format(q)}


# 查询参数验证
# 不传默认为None
# @app.get("/search/")
# def search(q: str = Query(None, max_length=5)):
#     return {"msg": "查询参数为{}".format(q)}


# 验证必传, 不传会报错
@app.get("/search/")
def search(q: str = Query(..., max_length=5)):
    return {"msg": "查询参数为{}".format(q)}


# 3. 表单参数
# 设置表单请求体参数验证模型
class ArticleModel(BaseModel):
    title: str
    author: str
    content: str = None  # 如果没有传入这个参数,则默认为None
    description: str = Field(max_length=5)  # 限制最大长度


@app.post("/article/")
def add_article(article: ArticleModel):
    print(article)
    return {"article": article}
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐