본문 바로가기

웹 프레임워크/FastAPI

FastAPI - 10 (폼 데이터 - Form Data)

출처: https://fastapi.tiangolo.com/tutorial/request-forms/
아래의 내용은 공식 사이트의 내용을 제 경험과 생각을 추가하여 다시 정리한 것 입니다.

폼 데이터

fastapi는 폼 데이터를 처리 하기 위해 Form을 제공합니다.

from fastapi import FastAPI, Form   # Form import
from typing_extensions import Annotated

app = FastAPI()


@app.post("/login/")
# username: Annotated[str, Form()] -> Form, Annotated를 사용하여 username을 폼 데이터로 지정
# password: Annotated[str, Form()] -> Form, Annotated를 사용하여 password를 폼 데이터로 지정
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return {"username": username}

테스트를 위해 HTML 화면을 만드는 코드를 추가 합니다.

# 기존에서 추가된 import
from fastapi import FastAPI, Form, Response
from fastapi.responses import HTMLResponse
from typing_extensions import Annotated

app = FastAPI()


@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return {"username": username}
# 기존 코드


# 테스트를 위해 HTML 화면을 만드는 코드를 추가
@app.get("/", response_class=HTMLResponse)
async def get_login_form():
    html_content = """
    <html>
        <body>
            <form action="/login/" method="post">
                <input type="text" name="username" placeholder="Username">
                <input type="password" name="password" placeholder="Password">
                <input type="submit" value="Login">
            </form>
        </body>
    </html>
    """
    return Response(content=html_content, media_type="text/html")

테스트

http://localhost:8000/

위의 URL로 접속하면 아래와 같은 화면이 나옵니다.

위의 화면에서 username과 password를 입력 합니다.

Login 버튼을 클릭하면 아래와 같은 결과가 나옵니다.