18. Form Data
1. Form Data
- JSON 대신 form fields를 수신해야 하는 경우
Form
을 사용할 수 있다.
Note
- forms를 사용하기 위해서는 먼저,
$ pip install python-multipart
를 통해python-multipart
를 설치해야 한다.
2. Import Form
- 먼저,
fastapi
의Form
을 임포트한다.
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}
3. Define Form
parameters
Body
또는Query
와 마찬가지로 form 매개변수를 생성한다.
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}
- 이와 같은 form fields는
username
과password
를 form fields로 보내야 하는 OAuth2 등을 사용할 때 쓰일 수 있다. - OAuth2의 사양에서는 fields의 이름이 정확히
username
과password
여야 하고 JSON이 아닌 form fields로만 전송되어야 한다.
Note
- form bodies를 선언하려면
Form
을 사용해야 한다. - 그 이유는 매개변수가 query 매개변수 또는 JSON body로 해석되기 때문이다.
4. About "Form Fields"
- HTML forms(
<form></form>
)가 서버에 데이터를 보낼 때는 JSON과 다른 특수 인코딩을 사용한다.
Note
- forms의 데이터는 일반적으로 "media type"인
application/x-www-form-urlencoded
를 사용하여 인코딩된다. - 하지만 form에 파일이 포함된 경우
multipart/form-data
로 인코딩된다. - 이와 같은 인코딩 및 form fields에 대해 자세히 알아보려면
POST
에 대한 MDN 웹 문서를 확인하면 된다.
- path operation에서 여러
Form
매개변수를 선언할 수 있다. - 하지만 이 경우 request에
application/json
대신application/x-www-form-urlencoded
를 사용하여 인코딩된 body가 있기 때문에 JSON의 형식으로 받는Body
fields는 선언할 수 없다.