首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板