fastapi: 在路由函数中判断请求方法(使get/post方法使用同一个函数)
一,代码:
# GET POST 路由:处理表单提交
@router.api_route("/register", methods=["GET", "POST"], summary="用户注册")
async def post_register(request: Request,db: AsyncSession = Depends(get_db)):
# 核心判断逻辑:检查 request.method
if request.method == "GET":
form = RegistrationForm()
return templates.TemplateResponse(
request=request,
name="account/register.html",
context={"request": request, "form": form, "title": "注册用户"})
elif request.method == "POST":
# 将 FastAPI 接收到的 FormData 转换为 WTForms 需要的格式
form_data = await request.form()
form = RegistrationForm(form_data)
if form.validate():
说明:
装饰器必须使用 @app.api_route
平时我们常用的 @app.get() 或 @app.post() 是快捷装饰器,只能绑定单一方法。
要同时支持多个方法,必须使用底层的 @app.api_route(path, methods=[...])。
request: Request 对象
通过在函数参数中声明 request: Request,FastAPI 会把当前请求的上下文注入进来。
request.method 返回的是大写的字符串(如 "GET"、"POST")。
浙公网安备 33010602011771号