๐ Front End Developer ์ Back End ๋์ ๊ธฐ ! ๐
์ด ๊ธ์ PROJECT LION : ํธ์ฝ์น ๊ฐ์ฌ๋์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฐธ๊ณ ํ ๊ธ์ ๋๋ค.
์์ ์ค, ๊ฐ๋ฐ๊ณผ์ ์ ๋ฆฌ ๋ฐ issue๊ฐ ๋์๋ ๋ถ๋ถ๋ค์ ๊ณต์ ๋ฐ ๊ธฐ๋กํ๊ณ ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
โ form > input ๊ฐ์ ๋ง๊ฒ ์ํ์ด๋ฆ, ๊ฐ๊ฒฉ, ์ค๋ช , ์ด๋ฏธ์ง ๋ฑ ์ฒจ๋ถ ํ ๋ฑ๋ก๋ฒํผ์ ํด๋ฆญ ์ ๊ฐ์ด ์ ์ก๋๋ logic์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค.
API ์์ฑ
= get ๋ฐฉ์(default)์ผ๋ก form์ ํธ์ถ ์ ๋ฑ๋ก ํ๋ฉด์ด ๋ณด์ด๋๋ก ํธ์ถํ๋ API๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.์ฆ, /form ์ฃผ์๋ก flask ์์ฒญ์ ํ๊ฒ ๋๋ฉด, product_form.html file์ ๋ฐํํด ์ฃผ๊ฒ ๋ค๋ ์ฝ๋์ด๋ค.
๐ render template ์ฌ์ฉ์ ์ํด์, import ํ์ํจ
-> from flask import request, render_template
- templates folder ์์ฑ ๋ฐ > product_form.html ์์ฑ
= browser ์์ผ๋ก ํ์ธ์ ํด๋ณด๊ธฐ์ ์์, /form์ mapping ์์ผ๋์์ง๋ง, ์์ ์ blueprint๋ก ์ฃผ์์ฐฝ ์์ /products ๋ฅผ ์ก์๋์์ผ๋ฏ๋ก, ์ค์ง์ ์ธ ์ฃผ์๋ "/products/form" ์ ์ ๋ ฅ ์ ํธ์ถ ๋ ๊ฒ์ด๋ค.
html ํ๊ทธ ์์ฑ
= ์ํ ๋ฑ๋ก ๋ฒํผ์ submit์ผ๋ก ์ ์ก ์, /products/regist ์ฃผ์๊ฐ์ผ๋ก ๋ฑ๋ก์ ์์ฒญํ ๊ฐ์ด ์ ๋ฌ๋๋ค.๊ฐ์ด ์ฃผ์์ฐฝ์ ๋ ธ์ถ๋๋ ๊ฒ ๋ณด๋ค๋ privacy ํ ๊ฒ์ด ๋์ผ๋ฏ๋ก post๊ฐ์ผ๋ก ์ ์กํ๋ฉฐ upload(img) ์ ๋ ฅ๊ฐ๋ ํฌํจ๋์ด์์ผ๋ฏ๋ก multipart ๊ฐ์ ์ถ๊ฐํ๋ค.
- ์ ์ก ๊ฐ ํ์ธ(error - ๊ฐ input์ name ๊ฐ์ด ์์ ๊ฒฝ์ฐ)
๐งจ 3๋ฒ ์ด๋ฏธ์ง์์๋ ๊ฐ input๋ง๋ค name๊ฐ์ด ํฌํจ๋์ด ์์ด ์ ์์ ์ผ๋ก ๊ฐ์ด ์ ์ก๋๊ณ , db์ ์ ์ฅ๋์ง๋ง name๊ฐ์ด ์์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํ์ฌ ํ ์คํธ ํด๋ณด์๋ค.๐งจ
= nonetype ๋ฐ filename error๊ฐ ๋ฐ์ํ๋ค. product controller์์ filename์ด ์กด์ฌํ๋๋ฐ, upload ์ filename์ด ์๋ค๋ error ์ธ ๊ฒ์ด๋ค.์ฆ, ๊ฐ์ด ์ ๋ฌ๋์ง ์์๋ค๋ ๊ฒ์ด๋ค. ๊ฐ ์ ๋ ฅ๊ฐ์ด ์ด๋ ํ ๋ณ์๊ฐ์ ๊ฐ์ง๊ณ ์ ๋ฌ์ด ๋์ด์ผํ๋๋ฐ, ๋ณ์๊ฐ ์ ์ฅ๋์ง ์์ ์ ๋ฌ๋ฐ์ ๋ ์๋ฌด๊ฒ๋ ์๋ค๊ณ ์ธ์์ ํ๋ ๊ฒ์ด๋ค.
request.form์ผ๋ก ์์ฒญ์ ๋ฐ์ ๋, ํด๋น name์ ์ฐพ์์ ์ ์ก๋ฐ์ ๊ฐ์ ์ ์ฅํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
- ์ ์ก๊ฐ ์ ๋ ฅ ๋ฐ ํ์ธ(success)
= name๊ฐ์ ๊ฐ๊ฐ ๋ถ์ฌํ ํ, db์ ์ ์ฅํ๊ธฐ ์ํด data ๊ฐ์ ์ ์ก ์ ์ ์ฅ๋๋ ๊ฒ๊น์ง ํ์ธํ ์ ์๋ค.
โ ํ์ฌ ๋ฑ๋ก ํผ์ ์๋ฌด๋ฐ ์คํ์ผ๋ ์กํ์์ง ์๋ html ๊ตฌ์กฐ์ด๋ค.
์ด ํผ์ css(์๋ง bootstrap์ ์ฌ์ฉํ ์์ ) ๋ก ์คํ์ผ ์์ ์ ํด์ฃผ์ด์ผ ํ๋๋ฐ, ํ์ ์ ํฌํจ๋์ด์๋ ์์ ๋ด์ฉ์ด๋ผ ๋ฐ๋ก ๊ณต๋ถํ ํ์๊ฐ ์๋ค๊ณ ํ๋จํ๋ค.
๋ณ๋์ ๊ณผ์ ์ค๋ช ์์ด ์์ ํ ๊ฒฐ๊ณผ๋ฌผ๋ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ๋์ฒดํ๊ฒ ๋ค.โ
= ๋ณด์ด๋ ๋ฐ์ ๊ฐ์ด ๊น๋ํ๊ฒ ๊ตฌํํด ๋ด์๋ค. bootstrap์ ์ด์ฉํ์ฌ ์์ ํ์๋๋ฐ, ๋๋ bootstrap์ ํ์ ์๋ ์ฌ์ฉํ์ง ์๊ณ , ๊ทธ๋ค์ง ์ ํธํ์ง ์๋๋ค.
๋จ์ํ ํ๋ก์ ํธ์ธ ๊ฒฝ์ฐ ๊ฐ๋จํ๊ฒ ๋ณด์ด๋ ๋ฐ์ ๊ฐ์ด ํด๋์ค๋ง ๋ก๊ฒจ์ ์คํ์ผ์ ๊ตฌ์ถํด ๋ผ ์ ์์ง๋ง..
- ์ค์ง์ ์ธ ํ๋ก์ ํธ์์์ ์์์ boostrap์ ํ์ฉํ๊ธฐ์ ์ด๋ ต๋ค.
- ๊ธฐ์กด ์ด๊ธฐํ ์ฝ๋์ธ reset๊ณผ ๊ฒน์น๋ class๊ฐ ๋ง๋ค.
์ฅ์ ๋ ๋ฌผ๋ก ๋ฐ์ด๋์ง๋ง, ํ๋ก์ ํธ๋ฅผ ์งํํ๋๋ฐ์ ์์ด์ ๋จ์ ์ด ๋ ๋ง๋ค๊ณ ํ๋จํ์ฌ css ๋ฐ sass๋ฅผ ํ์ฉํ์ฌ component๋ฅผ ๊ตฌ์ถํ๊ณ module ๋ณ๋ก ๋ก๊ฒจ์ฐ๋ ๋ฐฉ์์ผ๋ก ์์ ์ ํ๊ณ ์๋ค.
์ด์ ๊ฐ์ด ์ํ ๋ฑ๋ก์ browser ์์์ ํ์ธํด ๋ด์๊ณ ,
๋ค์ ๊ณผ์ ์ ์ํ๋ฑ๋ก์ผ๋ก ์ ์ฅํ ์ํ์ list page์ ๋ฟ๋ ค๋ณด๋๋ก ํ๊ฒ ๋ค.
์ด์ ์ ์ ์ฌ๋ฐ์ด์ง๊ณ ์๋ค!!!!!๐๐