FastAPI - Form Data 받기

2025. 9. 1. 14:20Programming Language/Python

반응형

jsp를 쓰는 경우는 Form Data를 받는 형태로 구성해서 사용자의 데이터를 받아 저장하는 형태로 패턴을 형성하고 있다.

거기서 Spring을 쓰는 경우는 대부분 위와 같은 방식으로 처리하는 걸로 기억하는데 FastAPI에서도 application/x-www-form-urlencoded 혹은 multipart/form-data로 오는 요청을 받을때 이를 처리하기 위한 Form()이 존재한다

 

1. Form()의 사용

먼저 Form은 fastapi 내부에 존재하며 요청을 받았을때 어디서 값을 읽어야할지 지정해줘야하기 때문에 typing에서 Annotated를 추가해줘야 한다.

그리고 로그인 정보를 form으로 받아서 이를 사용하는 메서드를 하나 만들어보자면 일단

이렇게 선언하고 

그리고 사용자의 정보를 매개변수에 넣고 Annotated에 문자열로 데이터를 받고 

이 데이터는 Form데이터에서 가져올거다 

라고 넣어주면 된다.

추가로 사용자 아이디, 비밀번호, 전화번호를 받아보자.

그리고 잘 받았는지 확인하기 위해서 그냥 데이터를 전부 return 해주자.

이제 postman을 통해서 

데이터를 전송할 타입을 설정하고 (form-data 혹은 x-www-form-urlencoded)

전송해보면

이렇게 잘 받아와서 응답하는것을 볼 수 있다.

 

2. Form모델

이제 위에서 받았던 개개별적인 폼데이터를 모델로 선언해서 받아보자.

방법은 기존 모델을 선언했던것과 동일하게 만들어주고

요청을 받는 부분에서 그냥 타입을 해당 모델 타입으로 설정해주면 된다.

요청을 보내보면

응답을 잘 받는것을 볼 수 있다.

 

3. File 모델과 UploadFile 모델 

Fast API에서 파일을 받을때는 안정적이기 위해서는 Form을 사용해서 전송하는 것이 좋다.

아니면 application/octet-stream로 그냥 파일의 바이트를 그대로 전송하는 형태를 사용하거나 JSON(base64)로 파일을 담아보내는 방법이 있다

근데 이 두 방법은 사용이 번거롭거나 사용할때 자원을 많이 소요한다는 단점이 존재한다.

그리고 에초에 웹에서는 이러한 방식이 오히려 더 불편할 수 도 있다.

 

그렇기에 Form으로 file을 전송하고 이를 받아 처리하는 방법을 알아보자.

 

File과 UploadFile은 fastapi에서 import해서 사용이 가능하다.

 

그리고 라우팅하는 함수를 하나 그냥 선언해주고 

이제 파라미터에 file이란 이름으로 bytes타입으로 데이터를 받는데 File()을 넣어서 Multipart/form-data에서 file을 읽어오라고 설정해주자.

...은 필수값으로 설정하는걸로 이렇게 설정하면 file이라는 값으로 파일을 무조건 보내줘야만 한다.

그리고 postman에서 

form-data의 매개변수는 File을 선택해주고 데이터를 전송해보자.

 

그러면 데이터를 읽어서 길이를 반환하는 것을 볼 수 있다.

 

 

그리고 이제 UploadFile의 경우는 타입에 대한 힌트로 

이렇게 타입에 써주고 해당 변수에 대한 값을 불러오면

이렇게 가져와서 확인할 수 있다.

 

만약 여러개의 파일을 받기 위해서라면 

파일을 List로 받아주면 된다

각 File과 UploadFile로 확인해보자면 먼저 File의 경우는 리스트로 타입을 넣어주고 데이터만 for-in으로 list로 뽑아주면 된다.

 

UploadFile도 비슷하다.

이렇게 리스트로 뽑아내준다.

 

 

 

 

 

 

 

반응형

'Programming Language > Python' 카테고리의 다른 글

Fast API - 라우팅 데코레이터의 속성  (1) 2025.09.02
FastAPI - Exception  (0) 2025.09.02
FastAPI - 응답모델  (1) 2025.09.01
FastAPI - example  (1) 2025.08.29
FastAPI - 모델의 중첩  (0) 2025.08.29