跳過到頁腳內容
產品比較

FastAPI Python(對開發者而言如何運作)

FastAPI是一個現代化的、高效能的 Web 框架,用於使用 Python 建立 API。 它旨在易於使用和學習,同時提供強大的功能,例如自動驗證、序列化和自動互動式 API 文件。 此外,它還適用於任何模板引擎,並允許您使用專案所需的任何預設模板配置。

讓我們深入了解FastAPI的細節、特性以及如何有效地使用它。 本文稍後也會介紹IronPDF ,這是Iron Software出品的 PDF 產生 Python 套件。

FastAPI 的主要特性

1.高效能:FastAPI 是目前速度最快的 Python 框架之一,可與 Node.js 和 Go 相媲美,這得益於它使用 Starlette 構建 Web 部件,使用 Pydantic 構建資料部件。 2.易用性:設計直觀,可減少閱讀文件所花費的時間。 此框架利用標準的 Python 類型提示進行資料驗證和序列化。 3.自動互動式文件:FastAPI 使用 OpenAPI 和 JSON Schema 自動產生互動式 API 文檔,可透過 /docs(Swagger UI)和 /redoc(ReDoc)存取。 API 的任何更新都會自動反映在文件中。 4.編輯器支援:對 VS Code 等編輯器中的程式碼補全和類型檢查提供出色的支持,從而加快開發速度並減少錯誤。 5.基於標準:它基於(並完全相容)API 的開放標準:OpenAPI 和 JSON Schema。

安裝

您可以使用 pip 安裝 FastAPI 和Uvicorn (一個 ASGI 伺服器):

pip install fastapi
pip install "uvicorn[standard]"
pip install fastapi
pip install "uvicorn[standard]"
SHELL

創建您的第一個 FastAPI 應用程式

以下是一個簡單的範例,可協助您快速上手 FastAPI 並透過使用者介面公開 Python 資料:

from fastapi import FastAPI

# Create a FastAPI 'app' instance
app = FastAPI()

# Root path operation
@app.get("/")
def read_root():
    return {"Hello": "World"}

# Path operation for items including query parameter 'q'
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
from fastapi import FastAPI

# Create a FastAPI 'app' instance
app = FastAPI()

# Root path operation
@app.get("/")
def read_root():
    return {"Hello": "World"}

# Path operation for items including query parameter 'q'
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
PYTHON

要運行該應用程序,請使用 Uvicorn:

uvicorn main:app --reload
uvicorn main:app --reload
SHELL

此命令將啟動開發伺服器,並在程式碼變更時自動重新載入。 您可以透過http://127.0.0.1:8000/docs存取互動式 API 文件。

進階功能

FastAPI 支援多種進階功能,使其適用於複雜的應用程式:

1.依賴注入:FastAPI 提供了一個強大的依賴注入系統,讓您可以乾淨且有效率地管理依賴項。 2.後台任務:您可以定義在回傳回應後執行的後台任務,這對於發送電子郵件或處理資料等任務非常有用。

  1. WebSockets :FastAPI 支援 WebSockets,可實現客戶端和伺服器之間的即時通訊。 4.安全性:FastAPI 包含用於處理安全性的工具,包括 OAuth2、JWT 令牌等。 5.資料庫整合:FastAPI 可以使用 SQLAlchemy 或 Tortoise-ORM 等函式庫輕鬆地與資料庫整合。

範例:建立 CRUD API

讓我們建立一個簡單的 CRUD(建立、讀取、更新、刪除)API 來管理專案。

1.定義資料模型

from pydantic import BaseModel

# Define a Pydantic model for the item with default description and tax
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
from pydantic import BaseModel

# Define a Pydantic model for the item with default description and tax
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
PYTHON

2.建立 FastAPI 應用程式

from fastapi import FastAPI, HTTPException

# Initialize 'app' instance and an empty 'items' dictionary
app = FastAPI()
items = {}

# Create operation: Add a new item
@app.post("/items/")
def create_item(item: Item):
    item_id = len(items) + 1
    items[item_id] = item
    return item

# Read operation: Retrieve an item by 'item_id'
@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]

# Update operation: Replace an existing item
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    items[item_id] = item
    return item

# Delete operation: Remove an item by 'item_id'
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    return {"message": "Item deleted"}
from fastapi import FastAPI, HTTPException

# Initialize 'app' instance and an empty 'items' dictionary
app = FastAPI()
items = {}

# Create operation: Add a new item
@app.post("/items/")
def create_item(item: Item):
    item_id = len(items) + 1
    items[item_id] = item
    return item

# Read operation: Retrieve an item by 'item_id'
@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]

# Update operation: Replace an existing item
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    items[item_id] = item
    return item

# Delete operation: Remove an item by 'item_id'
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    return {"message": "Item deleted"}
PYTHON

介紹 IronPDF。

FastAPI Python(開發者使用指南):圖 1

IronPDF是一個功能強大的 Python 庫,旨在從 HTML、CSS、圖像和 JavaScript 建立、編輯和簽署 PDF。 它提供商業級的效能與低記憶體佔用量。 主要功能包括

HTML 至 PDF 轉換

將 HTML 檔案、HTML 字串和 URL 轉換為 PDF。 例如,使用 Chrome PDF 渲染器將網頁渲染為 PDF。

跨平台支援。

與各種 .NET 平台相容,包括 .NET Core、.NET Standard 和 .NET Framework。 它支援 Windows、Linux 和 macOS。

編輯和簽署

設定屬性、透過密碼和權限增加安全性,並將數位簽章套用至 PDF。

頁面模板和設置

使用頁眉、頁腳、頁碼和可調整的邊距自訂 PDF。 支援回應式版面與自訂紙張尺寸。

標準合規性

遵守 PDF/A 和 PDF/UA 等 PDF 標準。 支援 UTF-8 字元編碼,並能處理圖片、CSS 和字型等資產。

使用 IronPDF 和 FastAPI 產生 PDF 文檔

pip install fastapi
pip install ironPDF
pip install fastapi
pip install ironPDF
SHELL
from fastapi import FastAPI
from fastapi.responses import FileResponse
from ironpdf import *

# Apply your IronPDF license key
License.LicenseKey = "key"

# Initialize 'app' instance
app = FastAPI()

# Route for simple greeting
@app.get("/")
def read_root():
    return {"Hello": "IronPDF"}

# Route that reads items with path and query parameters
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

# Route for generating a PDF document
@app.get("/pdf")
async def get_pdf(greet1: str = None, greet2: str = None):
    # Use ChromePdfRenderer to create PDF from HTML
    renderer = ChromePdfRenderer()
    content = "<h1>Document Generated using IronPDF with FastAPI GET</h1>"
    content += "<p> Demonstrate PDF generation using User Inputs</p>"
    content += f"<p>Greetings from: {greet1}</p>"
    content += f"<p>And Greetings from: {greet2}</p>"
    pdf = renderer.RenderHtmlAsPdf(content)

    # Save the PDF to a file
    pdf.SaveAs("fastapi.pdf")

    # Create a response with the generated PDF
    headers = {
        "Content-Disposition": "inline; filename=sample.pdf"
    }
    return FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers)
from fastapi import FastAPI
from fastapi.responses import FileResponse
from ironpdf import *

# Apply your IronPDF license key
License.LicenseKey = "key"

# Initialize 'app' instance
app = FastAPI()

# Route for simple greeting
@app.get("/")
def read_root():
    return {"Hello": "IronPDF"}

# Route that reads items with path and query parameters
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

# Route for generating a PDF document
@app.get("/pdf")
async def get_pdf(greet1: str = None, greet2: str = None):
    # Use ChromePdfRenderer to create PDF from HTML
    renderer = ChromePdfRenderer()
    content = "<h1>Document Generated using IronPDF with FastAPI GET</h1>"
    content += "<p> Demonstrate PDF generation using User Inputs</p>"
    content += f"<p>Greetings from: {greet1}</p>"
    content += f"<p>And Greetings from: {greet2}</p>"
    pdf = renderer.RenderHtmlAsPdf(content)

    # Save the PDF to a file
    pdf.SaveAs("fastapi.pdf")

    # Create a response with the generated PDF
    headers = {
        "Content-Disposition": "inline; filename=sample.pdf"
    }
    return FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers)
PYTHON

程式碼解釋

此程式碼片段示範了 IronPDF 與 FastAPI 的集成,以根據使用者輸入動態生成 PDF 文檔,並將其作為可下載的回應提供。

1.設定許可證密鑰:套用 IronPDF 許可證密鑰以啟用其功能。

  1. FastAPI 初始化:初始化 FastAPI 實例( app )以處理 HTTP 請求。

3.基本路由處理程序:

  • read_root() : 存取根 URL ( / ) 時,傳回簡單的 JSON 訊息,表示"Hello IronPDF"。
  • read_item() : 接受item_id路徑參數和可選的q查詢參數。 傳回包含這些參數的 JSON 回應。
  1. PDF 生成路徑( /pdf ):
    • get_pdf() : 此非同步函數處理對/pdf端點的 GET 請求,帶有名為greet1greet2可選查詢參數。
    • 建立一個包含以下內容的 HTML 字串( content ):
      • 標明文件來源和用途的頁首。
      • 一段示範如何使用使用者輸入( greet1greet2 )產生 PDF 的段落。
    • 使用 IronPDF 中的ChromePdfRenderer()將 HTML 內容渲染成 PDF( pdf = renderer.RenderHtmlAsPdf(content) )。
    • 將產生的 PDF 儲存為"fastapi.pdf"( pdf.SaveAs(&quot;fastapi.pdf&quot;) )。

5.提供 PDF 檔:

  • 設定回應標頭,以指定應在瀏覽器中內嵌查看 PDF( &quot;Content-Disposition&quot;: &quot;inline; filename=sample.pdf&quot; )。
  • 建立一個指向產生的 PDF 檔案的FileResponse對象,並指定適當的媒體類型( &quot;application/pdf&quot; )。
  • 傳回FileResponse對象,當存取/pdf端點時,該對象會觸發 PDF 文件的下載。

此程式碼片段示範如何將 IronPDF 與 FastAPI 無縫集成,以根據使用者輸入動態產生和提供 PDF 文件。 它展示了將 HTML 內容轉換為 PDF 的功能,使其適用於需要透過 HTTP 即時產生和交付文件的應用。

輸出

下面顯示的是由 API 產生的 Swagger 輸出。

FastAPI Python(開發者使用方法):圖 2

PDF

FastAPI Python(開發者使用方法):圖 3

IronPDF 授權。

IronPDF需要 Python 許可證金鑰才能運作。 IronPDF for Python 提供免費試用許可證金鑰,使用戶能夠在購買前體驗各項功能。

在使用 IronPDF 軟體包之前,請將許可證密鑰放在腳本的開頭:

from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
PYTHON

結論

FastAPI是一個功能強大且易於使用的 Python API 建置框架。 FastAPI 具有高效能、自動產生文件和高級功能,對於初學者和經驗豐富的開發人員來說都是絕佳的選擇。 無論您是建立簡單的 API 還是複雜的 Web 應用程序,FastAPI 都能提供您成功所需的工具。

IronPDF是一個強大的 Python 庫,用於從 HTML 內容建立、操作和渲染 PDF 文件。 它提供 HTML 轉 PDF、互動式表單建立、PDF 操作(合併、分割)和文字擷取等功能。 非常適合輕鬆生成動態 PDF 並整合到各種 Python 應用程式中。

常見問題解答

如何在 Python 應用程式中將 HTML 內容轉換為 PDF?

您可以使用 IronPDF 的 ChromePdfRenderer 將 HTML、CSS 和 JavaScript 內容轉換成 PDF 檔案。這樣就可以無縫整合到 Python 應用程式中,從網頁內容產生 PDF 文件。

使用 FastAPI 建立 API 有什麼好處?

FastAPI 提供高效能、自動驗證、序列化及互動式 API 文件。它利用 Starlette 和 Pydantic 來確保速度和效率,可媲美 Node.js 和 Go,同時支援 OpenAPI 等開放標準。

如何在 FastAPI 中提供 PDF 文件?

您可以在 FastAPI 中提供 PDF 文件,方法是使用 IronPDF 生成 PDF 文件,然后使用 FastAPI 的 FileResponse 返回 PDF 文件。這種方法允許您根據客戶端要求動態地創建和服務 PDF。

是什麼讓 FastAPI 適用於即時應用程式?

FastAPI 支援 WebSockets,可實現客戶端與伺服器之間的即時通訊,因此是需要即時資料更新或即時互動的應用程式的理想選擇。

FastAPI 如何處理資料驗證及序列化?

FastAPI 使用 Pydantic 模型和標準 Python 類型的提示來處理資料驗證及序列化。這可確保輸入資料經過正確的驗證,並轉換為所需的格式,減少出錯的機會。

FastAPI 提供哪些安全功能?

FastAPI 提供強大的安全功能,包括 OAuth2、JWT 認證和依賴注入,讓開發人員可以以最少的工作量建立安全的應用程式。

IronPDF 可以用於跨平台應用程式嗎?

是的,IronPDF 的設計是跨平台的,支援 Windows、Linux 和 macOS。因此,對於希望將 PDF 生成整合至在不同作業系統上執行的應用程式的開發人員而言,IronPDF 是一個多用途的選擇。

FastAPI 如何提高開發人員的生產力?

FastAPI 可透過提供自動 API 文件、程式碼完成和類型檢查來提高開發人員的生產力。這可減少大量手動文件的需求,並有助於在開發過程中及早發現錯誤。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。