最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 框架 FastAPI詳解

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

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

什么是FastAPI?

FastAPI實現(xiàn)并支持了Python中的類型提示,使開發(fā)者能夠在編寫代碼時更加高效和可靠。它不僅簡化了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)化。
  • 簡單:開發(fā)者可以在數(shù)分鐘內(nèi)無痛地創(chuàng)建API。
  • 基于標(biāo)準(zhǔn):遵循OpenAPI和JSON Schema標(biāo)準(zhǔn),讓我們能夠自動生成交互式文檔和數(shù)據(jù)驗證。
  • 自動生成的交互式API文檔:Swagger UI和ReDoc界面。
  • Python 3.6+類型提示讓代碼自動完成,極大提升開發(fā)體驗。
  • 生產(chǎn)就緒:適合生產(chǎn)環(huán)境應(yīng)用的代碼。

安裝FastAPI

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

pip install fastapi

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

pip install uvicorn

開始使用FastAPI

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

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

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

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

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

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

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

定義請求方法

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

from fastapi import FastAPI
app = FastAPI()
# GET請求:獲取信息
@app.get("/")
async def root():
    return {"message": "Hello World"}
# POST請求:創(chuàng)建新資源
@app.post("/items/")
async def create_item(item: dict):
    return {"item_name": item.get("name")}
# PUT請求:更新資源
@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請求:刪除資源
@app.delete("/items/{item_id}")
async def delete_item(item_id: int):
    return {"item_id": item_id}

在FastAPI中,通過Python的類型提示系統(tǒng),我們可以方便地定義和解析路徑參數(shù)、請求體、查詢參數(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定義為一個整數(shù)。FastAPI會自動驗證傳遞的參數(shù)是否為整數(shù),并在不匹配時返回一個400錯誤響應(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。

請求體

FastAPI支持請求體數(shù)據(jù)的聲明和驗證。通常,POST、PUT等請求會需要一個請求體:

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模型來定義請求體的結(jié)構(gòu)和類型。FastAPI會驗證和解析請求體中的數(shù)據(jù),并將其作為參數(shù)傳遞給路徑操作函數(shù)。

數(shù)據(jù)驗證和自動文檔

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

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

異步支持

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

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

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

中間件與擴(kuò)展

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

下面是一個簡單的中間件示例,用于記錄請求時間:

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是一個常見的問題。FastAPI提供了一種簡單的方式來處理CORS問題,你可以通過安裝starlette.middleware.cors.CORSMiddleware來實現(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表頭
)

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

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

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

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

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ù)庫會話和路徑操作:

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

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

全面總結(jié)

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

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

相關(guān)文章

  • Python多線程編程(八):使用Event實現(xiàn)線程間通信

    Python多線程編程(八):使用Event實現(xiàn)線程間通信

    這篇文章主要介紹了Python多線程編程(八):使用Event實現(xiàn)線程間通信,,需要的朋友可以參考下
    2015-04-04
  • 擴(kuò)展Django admin的list_filter()可使用范圍方法

    擴(kuò)展Django admin的list_filter()可使用范圍方法

    今天小編就為大家分享一篇擴(kuò)展Django admin的list_filter()可使用范圍方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python之列表的append()方法最容易踩的坑

    Python之列表的append()方法最容易踩的坑

    這篇文章主要介紹了Python之列表的append()方法最容易踩的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • pandas中使用數(shù)據(jù)透視表的示例代碼

    pandas中使用數(shù)據(jù)透視表的示例代碼

    本文主要介紹了pandas中使用數(shù)據(jù)透視表的示例代碼,主要包含pivot_table函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Python實現(xiàn)堆排序案例詳解

    Python實現(xiàn)堆排序案例詳解

    這篇文章主要介紹了Python實現(xiàn)堆排序案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 基于python和pygame庫實現(xiàn)刮刮樂游戲

    基于python和pygame庫實現(xiàn)刮刮樂游戲

    這篇文章主要介紹了如何基于python和pygame庫實現(xiàn)刮刮樂游戲,文中通過代碼示例和圖文給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • Python中多版本安裝的全流程教學(xué)

    Python中多版本安裝的全流程教學(xué)

    為避免環(huán)境沖突并提升開發(fā)效率,掌握在同一操作系統(tǒng)上管理多個?Python?版本的能力至關(guān)重要,下面小編就和大家詳細(xì)介紹一下安裝流程吧
    2026-02-02
  • 在Windows系統(tǒng)下管理多版本Python的工具實現(xiàn)方案

    在Windows系統(tǒng)下管理多版本Python的工具實現(xiàn)方案

    作為一名開發(fā)者,我的電腦上常年安裝著多個 Python 版本:2.7、3.7、3.8、3.9、3.10……每次需要切換時,要么手動修改系統(tǒng)環(huán)境變量?PATH,因此本文記錄了我從編寫 PowerShell 腳本、封裝成全局命令,到解決執(zhí)行策略限制的完整過程,需要的朋友可以參考下
    2026-03-03
  • Python 3 判斷2個字典相同

    Python 3 判斷2個字典相同

    這篇文章主要介紹了Python 3 判斷2個字典相同,文中給大家提到了Python3 查找兩字典的相同點問題及解決方法,需要的朋友可以參考下
    2019-08-08
  • python如何生成網(wǎng)頁驗證碼

    python如何生成網(wǎng)頁驗證碼

    這篇文章主要為大家詳細(xì)介紹了python如何生成網(wǎng)頁驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評論

黔西县| 大关县| 思茅市| 布尔津县| 岳阳县| 恩施市| 罗甸县| 东城区| 敦煌市| 惠州市| 孟州市| 和龙市| 依安县| 清水县| 仙桃市| 冀州市| 辽中县| 沐川县| 临西县| 皋兰县| 兴宁市| 肃南| 贺州市| 巴彦淖尔市| 同仁县| 武冈市| 满城县| 池州市| 册亨县| 柳林县| 祁阳县| 台北县| 宣城市| 德庆县| 镇原县| 廊坊市| 阿城市| 南平市| 惠州市| 铜梁县| 班玛县|