跳至頁尾內容
產品比較

FastAPI Python(如何為開發人員運作)

FastAPI 是一個現代化的高效能網頁框架,用於使用 Python 建立 API。 它設計為易於使用和學習,同時提供強大的功能,如自動驗證、序列化和自動互動 API 文件。 此外,它能與任何模板引擎一起使用,讓您可以使用專案所需的任何預設模板配置。

讓我們深入了解 FastAPI 的細節、其功能以及如何有效地使用它。 在這篇文章的後面,我們還將探討來自 Iron Software 的 PDF 生成 Python 套件 IronPDF

FastAPI 的關鍵功能

  1. 高效能: FastAPI 是現有最快的 Python 框架之一,與 Node.js 和 Go 相當,這要歸功於它使用 Starlette 處理網頁部分及 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. 背景任務: 您可以定義背景任務在返回回應後執行,適用於發送電子郵件或處理資料等任務。
  3. 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
  1. 建立 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 標準,如 PDF/A 和 PDF/UA。 支援 UTF-8 字元編碼,處理圖片、CSS 和字體等資產。

使用 IronPDF 和 FastAPI 生成 PDF 文件

pip install fastapi ironpdf
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 授權金鑰以啟用其功能。

  2. FastAPI 初始化: 初始化一個 FastAPI 實例(app)來處理 HTTP 請求。

  3. 基本路徑處理程式:

    • read_root():存取根 URL(/)時,回應一個簡單的 JSON 訊息,指示 "Hello IronPDF"。
    • read_item():接受一個 item_id 路徑參數和一個可選的 q 查詢參數。 返回一個包含這些參數的 JSON 回應。
  4. PDF 生成路徑(/pdf):

    • get_pdf():這個非同步功能處理針對 /pdf 端點的 GET 請求,具有可選的查詢參數 greet1greet2
    • 構建一個 HTML 字串(content),包括:
      • 一個指示文件來源和目的的標題。
      • 一段文字演示使用使用者輸入生成 PDF(greet1greet2)。
    • 使用 IronPDF 的 ChromePdfRenderer() 將 HTML 內容渲染為 PDF(pdf = renderer.RenderHtmlAsPdf(content))。
    • 將生成的 PDF 保存為 "fastapi.pdf"(pdf.SaveAs("fastapi.pdf"))。
  5. 提供 PDF:
    • 配置回應頭以指定 PDF 應在瀏覽器中內嵌查看("Content-Disposition": "inline; filename=sample.pdf")。
    • 建立一個 FileResponse 物件,指向生成的 PDF 文件,具有合適的媒體型別("application/pdf")。
    • 返回 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 還是一個複雜的網頁應用程式,FastAPI 都提供了您成功所需的工具。

IronPDF 是用於從 HTML 內容建立、操作和渲染 PDF 文件的强大 Python 程式庫。 它提供 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文件並使用FastAPI的FileResponse返回。這種方法允許您根據客戶端的請求動態建立和提供PDF。

什麼使FastAPI適合即時應用程式?

FastAPI支援WebSockets,這使得客戶端和伺服器之間能夠實現即時通信,成為需要即時資料更新或即時互動的應用程式的理想選擇。

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

FastAPI使用Pydantic模型和標準Python型別提示來處理資料驗證和序列化。這確保輸入資料正確驗證並轉換為所需格式,減少錯誤的可能性。

FastAPI提供哪些安全功能?

FastAPI提供強大的安全功能,包括OAuth2、JWT身份驗證和依賴注入,允許開發者輕鬆建立安全的應用程式。

可以在跨平台應用程式中使用IronPDF嗎?

可以,IronPDF的設計是跨平台的,支援Windows、Linux和macOS。這使得它成為開發者在不同操作系統中整合PDF生成的多用途選擇。

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

FastAPI通過提供自動API文件、程式碼補全和型別檢查來提高開發者的生產力。這減少了大量手動文件的需求,並有助於在開發過程中早期發現錯誤。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話