Skip to content

ํผ ๋ฐ์ดํ„ฐ

JSON ๋Œ€์‹ ์— ํผ ๋ฐ์ดํ„ฐ ํ•„๋“œ๋ฅผ ๋ฐ›์„ ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ, ํผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ณด

ํผ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ผ๋‹จ python-multipart๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

E.g. pip install python-multipart.

ํผ ์ž„ํฌํŠธ

fastapi์—์„œ Form์„ ์ž„ํฌํŠธํ•ฉ๋‹ˆ๋‹ค:

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

ํผ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ •์˜ํ•˜๊ธฐ

๋ณธ๋ฌธ์ด๋‚˜ ์ฟผ๋ฆฌ์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํผ ๋งค๊ฐœ๋ณ€์ˆ˜๋„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

์˜ˆ๋ฅผ ๋“ค์–ด, Oauth2 ์‚ฌ์–‘์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ("๋น„๋ฐ€๋ฒˆํ˜ธ ํ๋ฆ„"์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š”) ๋ฐฉ๋ฒ•์€ username ๊ณผ password๋ฅผ ํผ๋ฐ์ดํ„ฐ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

์ด ์‚ฌ์–‘์€ ์ •ํ™•ํžˆ username ๊ณผ password๋ผ๊ณ  ๋œ ํ•„๋“œ๋“ค์ด ํ•„์š”ํ•˜๊ณ  JSON์ด ์•„๋‹Œ ํผ ํ•„๋“œ๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํผ๋งŒ ์žˆ์œผ๋ฉด ๋ณธ๋ฌธ(์ฟผ๋ฆฌ, ๊ฒฝ๋กœ, ์ฟ ํ‚ค)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ™์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ณด

ํผ์€ ๋ณธ๋ฌธ์„ ์ง์ ‘์ ์œผ๋กœ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

ํŒ

Form ์—†์ด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋‚˜ ๋ณธ๋ฌธ(JSON) ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ด์„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํผ ๋ณธ๋ฌธ์„ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Form์„ ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

"ํผ ํ•„๋“œ"์— ๋Œ€ํ•ด

HTML ํผ(<form></form>)์ด ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•ด JSON๊ณผ๋Š” ๋‹ค๋ฅธ "ํŠน๋ณ„ํ•œ" ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

FastAPI JSON ๋Œ€์‹ ์— ์ •ํ™•ํ•œ ๊ณณ์—์„œ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์ธ ์„ธ๋ถ€์‚ฌํ•ญ

ํผ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ "media type" application/x-www-form-urlencoded์„ ์ด์šฉํ•ด์„œ ์•”ํ˜ธํ™” ๋ฉ๋‹ˆ๋‹ค.

ํผ์ด ํŒŒ์ผ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์„ ๋•Œ๋Š” multipart/form-data๋กœ ์•”ํ˜ธํ™” ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฑ•ํ„ฐ์—์„œ ํŒŒ์ผ ๋‹ค๋ฃจ๊ธฐ์— ๋Œ€ํ•ด ์ฝ์„ ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์•”ํ˜ธํ™”์™€ ํผํ•„๋“œ์— ๋Œ€ํ•ด ๋” ์ฝ๊ณ ์‹ถ๋‹ค๋ฉด, MDN web docs for POST์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ฃผ์˜

๊ฒฝ๋กœ ๋™์ž‘์—์„œ ๋‹ค์–‘ํ•œ ํผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์š”์ฒญ์€ application/json ๋Œ€์‹ ์— application/x-www-form-urlencoded์„ ์ด์šฉํ•ด ์•”ํ˜ธํ™” ๋œ ๋ณธ๋ฌธ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— JSON์œผ๋กœ ๋ฐ›๊ธฐ๋ฅผ ์˜ˆ์ƒํ•˜๋Š” ๋ณธ๋ฌธํ•„๋“œ ๋˜ํ•œ ์„ ์–ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” FastAPI์˜ ํ•œ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ HTTP ํ†ต์‹ ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

์š”์•ฝ

์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์–ธํ•  ๋•Œ์—๋Š” Form์„ ์‚ฌ์šฉํ•˜์„ธ์š”.