FastAPI-表单处理(二)

2023-05-07 21:21:47 浏览数 (3)

处理表单提交

在 FastAPI 中,您可以使用 Form 参数注入来接收表单数据。Form 参数注入将会从表单数据中提取相应的字段值,并将它们转换为 Python 对象。例如,如果您的表单模型有一个名为 username 的字段,您可以使用 Form(...) 来注入该字段的值。例如:

代码语言:javascript复制
from fastapi import FastAPI, Form

app = FastAPI()

@app.post("/login")
async def login(username: str = Form(...), password: str = Form(...)):
    # 处理表单提交
    # ...

在上面的代码中,我们定义了一个 /login 路由,该路由使用 Form 参数注入来接收表单数据。例如,如果表单提交的数据包含了一个名为 username 的字段,FastAPI 会将该字段的值注入到 username 参数中。

当您处理表单提交时,您可以根据表单数据的内容进行不同的处理。例如,您可以使用 SQLAlchemy 将表单数据存储到数据库中。下面是一个使用 SQLAlchemy 存储表单数据的示例:

代码语言:javascript复制
from fastapi import FastAPI, Form
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 创建数据库连接
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 创建数据表
Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True, index=True)
    password = Column(String)

# 创建 FastAPI 应用程序
app = FastAPI()

@app.post("/register")
async def register(username: str = Form(...), password: str = Form(...)):
    # 创建数据库会话
    db = SessionLocal()
    # 创建用户
    user = User(username=username, password=password)
    # 添加用户到数据库
    db.add(user)
    db.commit()
    # 返回注册成功消息
    return {"message": "User registered successfully"}

在上面的代码中,我们首先创建了一个数据库连接。然后我们定义了一个 User 模型,用于描述用户数据。在 /register 路由中,我们首先创建了一个数据库会话,然后使用表单数据创建了一个 User 对象,最后将该对象添加到数据库中并提交更改。如果一切顺利,我们将返回一个包含成功消息的 JSON 对象。

0 人点赞