47 lines
1.6 KiB
Python
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
|