끄적/FastAPI

Form

uvumbu 2024. 12. 15. 17:35

 

데이터를 Form형태로 받고 싶을 경우 사용하는 것이다.

Form을 사용하려면 python-multipart를 설치해야 한다.

 

 

1. 설치

그럼 간단하게 설치부터 시작하자.

'pip install python-multipart'

다음으로 프론트엔드 제작을 위해 Jinja2도 마찬가지로 설치하자.

 

Form을 사용하면 Request의 Form Data에서 값을 가져올 수 있다.

사용법은 간단하다.

Form을 import해주고 아래와 같은 함수를 작성하자.

 

'def login(user_id: str = Form(...), password: str = Form(...)): ...'

 

'Form(...)'은 Form에서 데이터를 가져오겠다는 것이고 필수 요소를 의미한다.

우리가 입력하고 제출을 하면 데이터가 전송되는 것이다.

 

 

2. 실행

실행하기 전에 아래 사항을 알아두자.

 

GET

웹 브라우저에서 URL을 입력하거나 링크 클릭을 할 때 'GET' 요청을 사용한다.

즉, GET은 서버에 정보를 요청할 때 사용된다. (데이터 검색 / 특정 페이지 요청)

 

POST

사용자가 폼을 제출할 때 주로 사용

입력을 하고 제출을 할 때 서버에게 전송이 되는 것이다.

즉, POST는 데이터 생성 및 업데이트에 주로 사용된다.

 

웹사이트에 접근 : GET 요청

사용자가 데이터 제출 : POST 요청

 

웹페이지를 만들 때 GET과 POST가 많을 것이고,

우리가 API를 만들어서 예측해줘! 하는 건 대부분 POST 요청이 많을거다.

 

때문에 이전에 만들었던, POST역할을 하는 'login' 뿐만 아니라 GET의 역할을 하는 메서드도 추가해야 한다.

 

 

여기서 단순 api 응답이 아닌 프론트 엔드를 추가해서 구현해보려 한다.

 


Jinja

Jinja Template는 파이썬에서 사용할 수 있는 템플릿 엔진이다.

이걸로 간단한 프론트엔드를 구성하자.

 

아래와 같이 작성하자.

from fastapi import FastAPI, Form, Request

...

templates = Jinja2Templates(derectory='경로')#지정 경로에 Jinja2Templates이 있다는 의미다.

...

@app.get("/login/")
def login_get(request: Request):
    return templates.TemplateResponse("로그인 form 이름", context={'request': request})
...

 

별도의 로그인 form을 만들어두고, 그 이름을 '로그인 form 이름'에 넣으면 된다.

 

 

정리하면 get으로 로그인할 때, 반환으로 '로그인 form 이름'을 사용할건데, context 데이터는 request라는 변수로 사용자의 request를 담겠다는 의미다.

 

...


 

필요한 설정과 작성을 마치고 파일을 실행해보자.

 

여기에 아이디와 비밀번호를 입력해주면, 아래와 같이 나올거다.

 

{"user_id":"vamba"}

 

 

 

 

그리고 Swagger로 이동해보자.

우리가 앞서 구현했던 POST 부분에서 'def login(user_id: str = Form(…), password: str = Form(…)):'를 입력한 부분이 있다.

여기서 Form(...)은 필수 요소라는 의미하는 것이며 Swagger에서도 이를 알리고 있음을 확인할 수 있다.

 

 

 

 

'끄적 > FastAPI' 카테고리의 다른 글

FastAPI 확장 기능  (0) 2024.12.15
Pydantic  (0) 2024.12.15
Request Body와 Response Body  (0) 2024.12.15
Path Parameter와 Quert Parameter, 그리고 Optional Parameter  (0) 2024.12.15
URL Parameters  (0) 2024.12.15