ホームページ バックエンド開発 Python チュートリアル FastAPI と Discord の統合を使用した問い合わせフォーム バックエンドの構築

FastAPI と Discord の統合を使用した問い合わせフォーム バックエンドの構築

Jan 07, 2025 pm 08:24 PM

Building a Contact Form Backend with FastAPI and Discord Integration

このチュートリアルでは、FastAPI を使用して、問い合わせフォームの送信を管理し、Webhook 経由で Discord チャネルに送信する堅牢で安全なバックエンド API を構築する方法を示します。 また、アクセス制御のための重要な CORS 構成についても説明します。

前提条件:

  • Python 3.11
  • 高速API
  • httpx (非同期 HTTP リクエスト用)
  • Discord Webhook URL

ステップ 1: プロジェクトのセットアップ

プロジェクト ディレクトリを作成し、必要なパッケージをインストールします。

pip install fastapi uvicorn httpx python-dotenv
ログイン後にコピー

ステップ 2: FastAPI アプリケーションの作成

main.pyを作成:

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=["*"],
)
ログイン後にコピー

ステップ 3: データ モデルの定義

データ構造に Pydantic を使用します:

class FormData(BaseModel):
    name: str
    email: str
    message: str
    service: str
    companyName: str
    companyUrl: str
ログイン後にコピー

ステップ 4: 送信エンドポイント

フォーム送信ハンドラーを追加します:

@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))
ログイン後にコピー

ステップ 5: 環境変数

.env ファイルを作成します:

<code>FASTAPI_DISCORD_WEBHOOK_URL=your_discord_webhook_url_here</code>
ログイン後にコピー

仕組み:

  1. 安全な CORS: API へのアクセスを承認されたドメインのみに制限します。
  2. データ検証: Pydantic はデータの整合性を保証します。
  3. 非同期 Discord 統合: Discord にメッセージを効率的に送信します。
  4. 堅牢なエラー処理: 有益なエラー応答を提供します。

アプリケーションの実行:

uvicorn main:app --reload
ログイン後にコピー

http://localhost:8000 で API にアクセスします。

セキュリティのベストプラクティス:

  • CORS を制限する: 必要なドメインのみを許可します。
  • 環境変数: 機密情報を安全に保管します。
  • 入力の検証: ユーザー入力を常に検証します。
  • 包括的なエラー処理: 機密情報の公開を避けてください。

フロントエンド統合の例:

fetch('your_api_url/submit', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ /* form data */ })
});
ログイン後にコピー

結論:

この安全な FastAPI バックエンドは、問い合わせフォームを処理し、Discord と統合するための信頼性が高く効率的な方法を提供します。 非同期操作と堅牢なエラー処理の使用により、高性能で安全なソリューションが保証されます。

コード: https://www.php.cn/link/d92d7ec47187a662aacda2d4b4c7628e ライブ: https://www.php.cn/link/775bc655c77d679c193f1982dac04668

以上がFastAPI と Discord の統合を使用した問い合わせフォーム バックエンドの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Apr 02, 2025 am 07:03 AM

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

Python 3.6のロードピクルスファイルエラーmodulenotfounderror:ピクルスファイル「__builtin__」をロードした場合はどうすればよいですか? Python 3.6のロードピクルスファイルエラーmodulenotfounderror:ピクルスファイル「__builtin__」をロードした場合はどうすればよいですか? Apr 02, 2025 am 06:27 AM

Python 3.6のピクルスファイルの読み込みエラー:modulenotfounderror:nomodulenamed ...

Scapy Crawlerを使用するときにパイプラインファイルを書き込めない理由は何ですか? Scapy Crawlerを使用するときにパイプラインファイルを書き込めない理由は何ですか? Apr 02, 2025 am 06:45 AM

SCAPYクローラーを使用するときにパイプラインファイルを作成できない理由についての議論は、SCAPYクローラーを学習して永続的なデータストレージに使用するときに、パイプラインファイルに遭遇する可能性があります...

See all articles