ํผ ๋ฐ์ดํฐ¶
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
์ ์ฌ์ฉํ์ธ์.