Maison >développement back-end >Tutoriel Python >Création d'un backend de formulaire de contact avec l'intégration FastAPI et Discord

Création d'un backend de formulaire de contact avec l'intégration FastAPI et Discord

Susan Sarandon
Susan Sarandonoriginal
2025-01-07 20:24:401114parcourir

Building a Contact Form Backend with FastAPI and Discord Integration

Ce tutoriel montre la création d'une API backend robuste et sécurisée à l'aide de FastAPI pour gérer les soumissions de formulaires de contact et les relayer vers un canal Discord via des webhooks. Nous aborderons également la configuration cruciale de CORS pour un accès contrôlé.

Prérequis :

  • Python 3.11
  • API rapide
  • httpx (pour les requêtes HTTP asynchrones)
  • Une URL de webhook Discord

Étape 1 : Configuration du projet

Créez un répertoire de projet et installez les packages nécessaires :

<code class="language-bash">pip install fastapi uvicorn httpx python-dotenv</code>

Étape 2 : Création d'une application FastAPI

Créer 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>

Étape 3 : Définition du modèle de données

Utilisez Pydantic pour la structure des données :

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

Étape 4 : Point final de soumission

Ajoutez le gestionnaire de soumission de formulaire :

<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>

Étape 5 : Variables d'environnement

Créer un fichier .env :

<code>FASTAPI_DISCORD_WEBHOOK_URL=your_discord_webhook_url_here</code>

Comment ça marche :

  1. CORS sécurisé : Limite l'accès à votre API aux seuls domaines autorisés.
  2. Validation des données : Pydantic garantit l'intégrité des données.
  3. Intégration asynchrone de Discord : Envoie efficacement des messages à Discord.
  4. Gestion robuste des erreurs : Fournit des réponses aux erreurs informatives.

Exécution de l'application :

<code class="language-bash">uvicorn main:app --reload</code>

Accédez à l'API sur http://localhost:8000.

Meilleures pratiques de sécurité :

  • Restreindre CORS : Autoriser uniquement les domaines nécessaires.
  • Variables d'environnement : Stockez en toute sécurité les informations sensibles.
  • Validation des entrées : Validez toujours les entrées de l'utilisateur.
  • Gestion complète des erreurs : Évitez d'exposer des détails sensibles.

Exemple d'intégration frontend :

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

Conclusion :

Ce backend FastAPI sécurisé fournit une méthode fiable et efficace pour gérer les formulaires de contact et s'intégrer à Discord. L'utilisation d'opérations asynchrones et d'une gestion robuste des erreurs garantit une solution performante et sécurisée.

Code : https://www.php.cn/link/d92d7ec47187a662aacda2d4b4c7628e En direct : https://www.php.cn/link/775bc655c77d679c193f1982dac04668

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn