首頁 > 後端開發 > Python教學 > 使用 FastAPI 和 Discord 整合建立聯絡表單後端

使用 FastAPI 和 Discord 整合建立聯絡表單後端

Susan Sarandon
發布: 2025-01-07 20:24:40
原創
1007 人瀏覽過

Building a Contact Form Backend with FastAPI and Discord Integration

本教學示範使用 FastAPI 建立強大且安全的後端 API 來管理聯絡表單提交並透過 Webhooks 將其轉發到 Discord 通道。 我們還將解決關鍵的 CORS 配置以實現受控存取。

先決條件:

  • Python 3.11
  • FastAPI
  • httpx(用於非同步 HTTP 請求)
  • Discord webhook URL

第 1 步:項目設定

建立專案目錄並安裝必要的套件:

<code class="language-bash">pip install fastapi uvicorn httpx python-dotenv</code>
登入後複製

第 2 步:建立 FastAPI 應用程式

建立main.py:

<code class="language-python">import os
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import httpx

app = FastAPI()

# CORS Configuration (Security!)
app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://vicentereyes.org", "https://www.vicentereyes.org"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)</code>
登入後複製

第 3 步:資料模型定義

使用 Pydantic 進行資料結構:

<code class="language-python">class FormData(BaseModel):
    name: str
    email: str
    message: str
    service: str
    companyName: str
    companyUrl: str</code>
登入後複製

第 4 步:提交端點

新增表單提交處理程序:

<code class="language-python">@app.post("/submit/")
@app.post("/submit")  # Handles both /submit and /submit/
async def submit_form(form_data: FormData):
    try:
        # Format message for Discord
        message_content = {
            "content": f"New form submission:\n"
                       f"**Name:** {form_data.name}\n"
                       f"**Email:** {form_data.email}\n"
                       f"**Message:** {form_data.message}\n"
                       f"**Service:** {form_data.service}\n"
                       f"**Company Name:** {form_data.companyName}\n"
                       f"**Company URL:** {form_data.companyUrl}"
        }

        # Send to Discord webhook using httpx
        async with httpx.AsyncClient() as client:
            response = await client.post(os.environ["FASTAPI_DISCORD_WEBHOOK_URL"], json=message_content)

        if response.status_code != 204:
            raise HTTPException(status_code=response.status_code, detail="Discord message failed")

        return {"message": "Form data sent successfully"}

    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))</code>
登入後複製

第 5 步:環境變數

建立.env檔案:

<code>FASTAPI_DISCORD_WEBHOOK_URL=your_discord_webhook_url_here</code>
登入後複製

工作原理:

  1. 安全性 CORS: 將對 API 的存取限制為僅授權網域。
  2. 資料驗證: Pydantic 確保資料完整性。
  3. 非同步 Discord 整合: 有效率地將訊息傳送到 Discord。
  4. 強大的錯誤處理:提供資訊豐富的錯誤回應。

運行應用程式:

<code class="language-bash">uvicorn main:app --reload</code>
登入後複製

存取 API http://localhost:8000

安全最佳實務:

  • 限制 CORS: 僅允許必要的域。
  • 環境變數:安全儲存敏感資訊。
  • 輸入驗證:始終驗證使用者輸入。
  • 全面的錯誤處理:避免暴露敏感細節。

前端整合範例:

<code class="language-javascript">fetch('your_api_url/submit', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ /* form data */ })
});</code>
登入後複製

結論:

這個安全的 FastAPI 後端提供了一種可靠且高效的方法來處理聯絡表單並與 Discord 整合。 使用非同步操作和強大的錯誤處理可確保高效能和安全的解決方案。

代碼:https://www.php.cn/link/d92d7ec47187a662aacda2d4b4c7628e 直播:https://www.php.cn/link/775bc655c77d679c193f1982dac04668

以上是使用 FastAPI 和 Discord 整合建立聯絡表單後端的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板