Skip to content

18. Form Data


1. Form Data

  • JSON 대신 form fields를 수신해야 하는 경우 Form을 사용할 수 있다.


Note

  • forms를 사용하기 위해서는 먼저, $ pip install python-multipart를 통해 python-multipart를 설치해야 한다.


2. Import Form

  • 먼저, fastapiForm을 임포트한다.


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는 usernamepassword를 form fields로 보내야 하는 OAuth2 등을 사용할 때 쓰일 수 있다.
  • OAuth2의 사양에서는 fields의 이름이 정확히 usernamepassword여야 하고 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는 선언할 수 없다.

References