【FastAPI】入门基础

  • FastAPI 介绍和安装

    • FastAPI 是一个基于 Python 3.6+ 版本的异步 WEB 应用框架,使用 Python 类型注解构建 web API 。它的主要特点如下:
      • 高性能:与 Node JS 和 Go 相当。
      • 编码快:将开发功能的速度提高 2~3 倍。
      • Bug少:减少大约 40% 的由开发人员导致的错误。
      • 直观:强大的编辑器支持,可智能感知和补全代码。
      • 简单:易于学习和使用,减少文档阅读时间。
      • 简短:尽量减少代码重复。
      • 健壮:获得可用于生产的代码,具有自动交互文档。
      • 基于标准:基于 OpenAPI 和 JSON Schema 。
  • 1.安装

    • pip install fastapi
    • pip install "uvicorn[standard]"
  • 2.请求方式

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/index")
def index():
    return {"name": "index222"}


@app.post("/home")
def home():
    return {"name": "home"}


@app.api_route("/info", methods=["GET", "POST"])
def info():
    return {"name": "info"}


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=9001)
    # uvicorn.run("v1.app", host="127.0.0.1", port=9001,reload=True)  # 修改代码后,自动重启
  • 3.请求参数
import uvicorn
from fastapi import FastAPI
from fastapi.requests import Request

app = FastAPI()

#http://127.0.0.1:9001/home/12
@app.get("/home/{uid}")
def home(uid):
    print(uid)
    return {"data": "ok"}

#http://127.0.0.1:9001/index?info=123&age=18
@app.get("/index")
def index(info: str, age: int):
    print(info, age)
    return {"data": "ok"}

#
# @app.get("/mine/{uid}")
# def mine(uid: int, info: str, age: int):
#     print(uid)
#     print(info, age)
#     return {"data": "ok"}

# http://127.0.0.1:9001/mine/12?info=123&age=18
@app.get("/mine/{uid}")
def mine(request: Request, uid: int):
    print(uid)
    print(request.query_params)   # info=123&age=18
    print(request.query_params.get("info"))
    return {"data": "ok"}


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=9001)
  • 4.请求体
import uvicorn
from fastapi import FastAPI
from fastapi.requests import Request
from pydantic import BaseModel
from typing import List, Dict

app = FastAPI()

class Data(BaseModel):
    name: str
    age: int
    hobby: List
    info: Dict


@app.post("/home")
def home(data: Data):
    print(data.name)
    print(data.hobby)
    print(data.info)
    return {"data": "ok"}


@app.post("/mine")
async def mine(request: Request):
    data_dict = await request.json()
    print(data_dict)
    # {'name': 'xwl', 'age': 19, 'hobby': ['篮球', '足球'], 'info': {'k1': 123, 'k2': 456, 'k3': [111, 222, 33]}}
    return {"data": "ok"}


if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=9001)
  • 5.请求中间件,拦截所有的请求
import uvicorn
from fastapi import FastAPI
from fastapi import Request
from fastapi.responses import JSONResponse

app = FastAPI()

@app.middleware("http")
async def auth(request: Request, call_next):
    print("before")
    res = await call_next(request)
    print("after")
    return res

@app.get("/home")
def home(age):
    print(age)
    return {"data": "ok"}

if __name__ == '__main__':
    uvicorn.run(app, host="127.0.0.1", port=9001)

posted @ 2024-10-16 21:59  Tony_xiao  阅读(50)  评论(0编辑  收藏  举报