Files
fastapi_tutor_yb/router/features/form.py
T

47 lines
1.6 KiB
Python

from typing import Annotated
from fastapi import Depends, FastAPI,APIRouter,Form,Request,Response
from fastapi.security import OAuth2PasswordRequestForm
route = APIRouter(prefix="/form",tags=["form"])
@route.post("/token")
def login(form_data: Annotated[OAuth2PasswordRequestForm, Depends()]):
# form_data 是解析后的表单对象
# form_data.username → OAuth2 规范要求字段名必须是 "username"
# form_data.password → OAuth2 规范要求字段名必须是 "password"
# form_data.grant_type → 密码流程中必须是 "password"
# form_data.scopes → 空格分隔的权限列表
# form_data.client_id / client_secret → 如果客户端选择 client_secret_post
return {
"username": form_data.username,
"password":form_data.password,
"client_id": form_data.client_id,
"client_secret":form_data.client_secret,
"grant_type":form_data.grant_type,
"scopes":form_data.scopes,
}
@route.post("/form")
def login(username:str=Form(),password:str=Form()):
# form_data 是解nt_id / client_secret → 如果客户端选择 client_secret_post
return {
"username": username,
"password":password,
}
@route.post("/query")
def login(username:str,password:str):
# form_data 是解nt_id / client_secret → 如果客户端选择 client_secret_post
return {
"username": username,
"password":password,
}
@route.post("/raw")
async def upload(request: Request):
raw = await request.body() # bytes
text = raw.decode("utf-8") # 明确解码
return text