欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 框架 FastAPI詳解

 更新時(shí)間:2024年11月09日 10:25:51   作者:百錦再@新空間代碼工作室  
FastAPI 是一個(gè)現(xiàn)代、快速且高性能的 Web 框架,用于 Python 3.6+,基于 Python 類型提示構(gòu)建 API,它通過 Starlette 和 Pydantic 優(yōu)化,支持多種 HTTP 方法、異步編程、數(shù)據(jù)驗(yàn)證和自動(dòng)生成交互式文檔,FastAPI 適合快速開發(fā)高性能、可擴(kuò)展的 Web 服務(wù)

FastAPI是一種現(xiàn)代、快速(高性能)的Web框架,用于Python 3.6+,使用Python類型提示構(gòu)建API。它的設(shè)計(jì)初衷是幫助開發(fā)者在短時(shí)間內(nèi)開發(fā)出高性能的API服務(wù)。FastAPI的靈感來源于許多高性能的編程框架,包括Express、Django REST Framework和Flask,但它提供了一些特定的特性和優(yōu)化,使其脫穎而出。

什么是FastAPI?

FastAPI實(shí)現(xiàn)并支持了Python中的類型提示,使開發(fā)者能夠在編寫代碼時(shí)更加高效和可靠。它不僅簡(jiǎn)化了API的開發(fā)過程,還在性能方面做出了顯著貢獻(xiàn)。FastAPI能夠在多種情況下提供出色的吞吐量和低延遲,使其非常適合構(gòu)建快速和可擴(kuò)展的Web服務(wù)。

FastAPI的主要特性包括:

  • 快速:FastAPI是當(dāng)前最快的Python網(wǎng)絡(luò)框架之一,就像NodeJS和Go這樣的系統(tǒng)語言。它使用Starlette(用于網(wǎng)絡(luò)部分)和Pydantic(用于數(shù)據(jù)部分)進(jìn)行優(yōu)化。
  • 簡(jiǎn)單:開發(fā)者可以在數(shù)分鐘內(nèi)無痛地創(chuàng)建API。
  • 基于標(biāo)準(zhǔn):遵循OpenAPI和JSON Schema標(biāo)準(zhǔn),讓我們能夠自動(dòng)生成交互式文檔和數(shù)據(jù)驗(yàn)證。
  • 自動(dòng)生成的交互式API文檔:Swagger UI和ReDoc界面。
  • Python 3.6+類型提示讓代碼自動(dòng)完成,極大提升開發(fā)體驗(yàn)。
  • 生產(chǎn)就緒:適合生產(chǎn)環(huán)境應(yīng)用的代碼。

安裝FastAPI

在開始使用FastAPI之前,你需要確保你的Python環(huán)境已經(jīng)配置好,然后你可以通過以下命令安裝FastAPI:

pip install fastapi

為了運(yùn)行FastAPI應(yīng)用,我們還需要一個(gè)ASGI服務(wù)器,例如uvicorn:

pip install uvicorn

開始使用FastAPI

讓我們從一個(gè)簡(jiǎn)單的示例應(yīng)用開始,該應(yīng)用提供了一個(gè)基本的“Hello, World!”服務(wù)。

創(chuàng)建一個(gè)文件名為main.py,代碼如下:

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
    return {"Hello": "World"}

要運(yùn)行這個(gè)應(yīng)用,使用以下命令:

uvicorn main:app --reload
  • main:指的是Python文件(不包括.py擴(kuò)展名)。
  • app:是FastAPI實(shí)例的名字。
  • --reload:?jiǎn)⒂米詣?dòng)重載,在代碼更改時(shí)自動(dòng)重啟服務(wù)器。適合開發(fā)模式使用。

打開瀏覽器訪問http://127.0.0.1:8000,你將看到一個(gè)簡(jiǎn)單的JSON響應(yīng):{"Hello": "World"}。

此外,F(xiàn)astAPI會(huì)為你自動(dòng)生成API文檔。使用Swagger UI訪問http://127.0.0.1:8000/docs,或者使用ReDoc訪問http://127.0.0.1:8000/redoc。

定義請(qǐng)求方法

FastAPI支持幾種常見的HTTP方法:GET、POST、PUT、DELETE等。讓我們創(chuàng)建一個(gè)簡(jiǎn)單的示例,演示如何使用這些HTTP方法:

from fastapi import FastAPI
app = FastAPI()
# GET請(qǐng)求:獲取信息
@app.get("/")
async def root():
    return {"message": "Hello World"}
# POST請(qǐng)求:創(chuàng)建新資源
@app.post("/items/")
async def create_item(item: dict):
    return {"item_name": item.get("name")}
# PUT請(qǐng)求:更新資源
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: dict):
    return {"item_id": item_id, "item_name": item.get("name")}
# DELETE請(qǐng)求:刪除資源
@app.delete("/items/{item_id}")
async def delete_item(item_id: int):
    return {"item_id": item_id}

在FastAPI中,通過Python的類型提示系統(tǒng),我們可以方便地定義和解析路徑參數(shù)、請(qǐng)求體、查詢參數(shù)和表單數(shù)據(jù)。

路徑參數(shù)

FastAPI通過使用類型提示來定義路徑參數(shù):

from fastapi import FastAPI
app = FastAPI()
@app.get("/users/{user_id}")
async def read_user(user_id: int):
    return {"user_id": user_id}

在這里,路徑參數(shù)user_id定義為一個(gè)整數(shù)。FastAPI會(huì)自動(dòng)驗(yàn)證傳遞的參數(shù)是否為整數(shù),并在不匹配時(shí)返回一個(gè)400錯(cuò)誤響應(yīng)。

查詢參數(shù)

除了路徑參數(shù),F(xiàn)astAPI還支持查詢參數(shù)。它們是定義在URL路徑之后的可選參數(shù),通常用于過濾和分頁:

from fastapi import FastAPI
app = FastAPI()
@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
    return {"skip": skip, "limit": limit}

/items/路徑上,skiplimit是可選的查詢參數(shù),具有默認(rèn)值skip=0limit=10。

請(qǐng)求體

FastAPI支持請(qǐng)求體數(shù)據(jù)的聲明和驗(yàn)證。通常,POST、PUT等請(qǐng)求會(huì)需要一個(gè)請(qǐng)求體:

from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
    return item

在這里,我們使用Pydantic模型來定義請(qǐng)求體的結(jié)構(gòu)和類型。FastAPI會(huì)驗(yàn)證和解析請(qǐng)求體中的數(shù)據(jù),并將其作為參數(shù)傳遞給路徑操作函數(shù)。

數(shù)據(jù)驗(yàn)證和自動(dòng)文檔

FastAPI利用Pydantic進(jìn)行數(shù)據(jù)驗(yàn)證,并自動(dòng)生成API文檔。當(dāng)你運(yùn)行FastAPI應(yīng)用時(shí),它會(huì)生成兩個(gè)API文檔界面,分別是Swagger UI和ReDoc。

  • Swagger UIhttp://127.0.0.1:8000/docs – 提供了一個(gè)交互式的API文檔,你可以在瀏覽器中測(cè)試所有API操作。
  • ReDochttp://127.0.0.1:8000/redoc – 另一個(gè)自動(dòng)生成的API文檔界面,風(fēng)格簡(jiǎn)潔。

異步支持

FastAPI完全支持異步編程,它完全利用Python中的async和await特性。在定義路徑操作函數(shù)時(shí),可以通過async def來聲明異步操作:

from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
    return {"Hello": "World"}

異步編程能夠幫助服務(wù)器處理更多請(qǐng)求,使其能夠更快地響應(yīng)客戶端,尤其在I/O密集型環(huán)境中。結(jié)合uvicorn或任何ASGI兼容服務(wù)器,F(xiàn)astAPI能夠?qū)崿F(xiàn)真正的并發(fā)操作。

中間件與擴(kuò)展

中間件是一個(gè)能夠在請(qǐng)求或響應(yīng)期間處理數(shù)據(jù)的函數(shù)。FastAPI提供簡(jiǎn)單的方式來編寫中間件,這有助于在應(yīng)用中引入額外的功能,例如請(qǐng)求/響應(yīng)日志、CORS處理、安全措施等。

下面是一個(gè)簡(jiǎn)單的中間件示例,用于記錄請(qǐng)求時(shí)間:

from fastapi import FastAPI
from starlette.middleware.base import BaseHTTPMiddleware
import time
app = FastAPI()
class TimingMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request, call_next):
        start_time = time.time()
        response = await call_next(request)
        process_time = time.time() - start_time
        response.headers["X-Process-Time"] = str(process_time)
        return response
app.add_middleware(TimingMiddleware)

CORS(跨域資源共享)

在現(xiàn)代Web應(yīng)用開發(fā)中,CORS是一個(gè)常見的問題。FastAPI提供了一種簡(jiǎn)單的方式來處理CORS問題,你可以通過安裝starlette.middleware.cors.CORSMiddleware來實(shí)現(xiàn):

from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允許訪問的源
    allow_credentials=True,
    allow_methods=["*"],    # 允許的HTTP方法
    allow_headers=["*"],    # 允許的HTTP表頭
)

通過以上配置,你可以實(shí)現(xiàn)從不同源的客戶端訪問FastAPI應(yīng)用。你可以根據(jù)實(shí)際需求調(diào)整允許的來源、方法和表頭。

數(shù)據(jù)庫集成

FastAPI是一個(gè)輕量級(jí)框架,可以很容易地與多種數(shù)據(jù)庫集成。在構(gòu)建生產(chǎn)級(jí)應(yīng)用時(shí),數(shù)據(jù)庫是必不可少的一部分。其中SQLAlchemy是Python中常用的ORM框架,我們可以利用它與FastAPI進(jìn)行集成:

首先,安裝SQLAlchemy和數(shù)據(jù)庫驅(qū)動(dòng):

pip install sqlalchemy
pip install databases

接下來,定義數(shù)據(jù)庫配置和模型:

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
class Item(Base):
    __tablename__ = 'items'
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    description = Column(String, index=True)

創(chuàng)建數(shù)據(jù)庫會(huì)話和路徑操作:

from fastapi import Depends, FastAPI, HTTPException
from sqlalchemy.orm import Session
from typing import List
app = FastAPI()
Base.metadata.create_all(bind=engine)
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()
@app.post("/items/", response_model=Item)
def create_item(item: Item, db: Session = Depends(get_db)):
    db.add(item)
    db.commit()
    db.refresh(item)
    return item
@app.get("/items/", response_model=List[Item])
def read_items(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
    items = db.query(Item).offset(skip).limit(limit).all()
    return items

在上面的代碼中,我們定義了一個(gè)SQLAlchemy數(shù)據(jù)庫模型,同時(shí)創(chuàng)建了CRUD操作,包括創(chuàng)建(POST)和讀?。℅ET)功能。通過Depends依賴注入,我們將數(shù)據(jù)庫會(huì)話傳遞給路徑操作函數(shù),使我們能夠輕松管理數(shù)據(jù)庫事務(wù)。

全面總結(jié)

FastAPI是一個(gè)強(qiáng)大且高效的Web框架,適合從小型項(xiàng)目到大型企業(yè)級(jí)應(yīng)用的各種開發(fā)需求。因?yàn)樗淖詣?dòng)文檔、數(shù)據(jù)驗(yàn)證和優(yōu)秀的性能,F(xiàn)astAPI在編寫現(xiàn)代Web服務(wù)時(shí)提供了巨大的便捷性。結(jié)合異步、CORS、中間件和數(shù)據(jù)庫集成功能,F(xiàn)astAPI能夠幫助開發(fā)者快速構(gòu)建穩(wěn)健的API服務(wù)。我們強(qiáng)烈推薦在你的下一個(gè)項(xiàng)目中試用FastAPI,并享受其帶來的高效開發(fā)體驗(yàn)。

到此這篇關(guān)于Python 框架 FastAPI的文章就介紹到這了,更多相關(guān)Python 框架 FastAPI內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python定義空函數(shù)的6種方法小結(jié)

    Python定義空函數(shù)的6種方法小結(jié)

    本文主要介紹了Python中定義空函數(shù)的6種方法,包括注釋、pass、return、Ellipsis等,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解

    python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解

    這篇文章主要介紹了python實(shí)現(xiàn)報(bào)表自動(dòng)化詳解,涉及python讀,寫excel—xlwt常用功能,xlutils 常用功能,xlwt寫Excel時(shí)公式的應(yīng)用等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • python opencv實(shí)現(xiàn)目標(biāo)區(qū)域裁剪功能

    python opencv實(shí)現(xiàn)目標(biāo)區(qū)域裁剪功能

    這篇文章主要介紹了python opencv實(shí)現(xiàn)目標(biāo)區(qū)域裁剪功能,通過截取到坐標(biāo)信息以后用CV2的裁剪就可以完美實(shí)現(xiàn),本文給大家分享實(shí)例代碼,需要的朋友可以參考下
    2021-07-07
  • 簡(jiǎn)述Python中的進(jìn)程、線程、協(xié)程

    簡(jiǎn)述Python中的進(jìn)程、線程、協(xié)程

    這篇文章主要介紹了Python中的進(jìn)程、線程、協(xié)程的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • python?ConfigParser庫的使用及遇到的坑

    python?ConfigParser庫的使用及遇到的坑

    這篇文章主要介紹了python?ConfigParser庫的使用及遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • python實(shí)現(xiàn)fenwick tree芬威克樹算法案例

    python實(shí)現(xiàn)fenwick tree芬威克樹算法案例

    芬威克樹,又稱為二叉索引樹或樹狀數(shù)組,是一種高效的數(shù)據(jù)結(jié)構(gòu),由Peter M. Fenwick于1994年提出,主要用于計(jì)算數(shù)組的前綴和以及支持對(duì)數(shù)時(shí)間復(fù)雜度的元素更新,通過維護(hù)一個(gè)特定的數(shù)組,利用整數(shù)的二進(jìn)制特性進(jìn)行區(qū)間和存儲(chǔ)
    2024-10-10
  • Python實(shí)現(xiàn)解析路徑字符串并獲取每個(gè)文件夾名稱

    Python實(shí)現(xiàn)解析路徑字符串并獲取每個(gè)文件夾名稱

    在?Python?中,解析路徑字符串并獲取每個(gè)文件夾的名稱是一項(xiàng)常見的任務(wù),這篇文章主要為大家詳細(xì)介紹了Python解析路徑字符串的具體方法,希望對(duì)大家有所幫助
    2024-04-04
  • python中l(wèi)ist常用操作實(shí)例詳解

    python中l(wèi)ist常用操作實(shí)例詳解

    這篇文章主要介紹了python中l(wèi)ist常用操作,以實(shí)例形式較為詳細(xì)的分析了列表list中常用的建立、添加、刪除、搜索、過濾等操作技巧,需要的朋友可以參考下
    2015-06-06
  • Python字符串的全排列算法實(shí)例詳解

    Python字符串的全排列算法實(shí)例詳解

    這篇文章主要介紹了Python字符串的全排列算法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了Python字符串全排列的常見操作技巧,需要的朋友可以參考下
    2019-01-01
  • python函數(shù)聲明和調(diào)用定義及原理詳解

    python函數(shù)聲明和調(diào)用定義及原理詳解

    這篇文章主要介紹了python函數(shù)聲明和調(diào)用定義及原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論