๐ Front End Developer ์ Back End ๋์ ๊ธฐ ! ๐
์ด ๊ธ์ PROJECT LION : ํธ์ฝ์น ๊ฐ์ฌ๋์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฐธ๊ณ ํ ๊ธ์ ๋๋ค.
์์ ์ค, ๊ฐ๋ฐ๊ณผ์ ์ ๋ฆฌ ๋ฐ issue๊ฐ ๋์๋ ๋ถ๋ถ๋ค์ ๊ณต์ ๋ฐ ๊ธฐ๋กํ๊ณ ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
โ ์ํ ์์ ์ ๋ฑ๋ก๊ณผ ๋งค์ฐ ์ ์ฌํ๋ค. ๋ณ๊ฒฝํ๊ณ ์ถ์ ํน์ ์ํ์ ๊ณ ์ ๋ฒํธ๋ฅผ ์ฃผ์๊ฐ์ ๋ด๊ณ update ์ฃผ์๋ฅผ ์ ์ํ๋ค. flask๊ฐ ์ฃผ์๋ฅผ ์์ฒญ๋ฐ์ผ๋ฉด API ํจ์๋ฅผ ํธ์ถํ๊ณ , ํน์ ์ํ์ ๊ณ ์ ๋ฒํธ๋ฅผ ๊ฐ์ง product document ์ํ์ ์ฐพ์ ์์ ์์ผ ์ฃผ๋ ๊ฒ์ด๋ค.
- ์ํ ์์ API ์์ฑ
= route๋ฅผ product_id/update ์ฃผ์๋ก ์์ฒญํ๋ฉฐ, update ํจ์๋ฅผ ์ฌ์ฉํจ๊ณผ ๋์์ product_id๊ฐ์ ๋ฐ์์ค๋ค.
= ์ํ ๋ฑ๋ก๊ณผ ์ ์ฌํ๊ฒ ๋์ผํ data ๊ฐ์ ๋ฐ์์จ๋ค.
ํ์ง๋ง ๋ฑ๋ก๊ณผ๋ ๋ค๋ฅธ ์ ์ด ์๋ค. ์์ ์ ํ๋ ๊ฒฝ์ฐ์๋ img file์ ์์ ํ์ง ์์ ์๋ ์์ ๊ฒ์ด๋ค.์์ ์ ํ์ง ์๋ ๊ฒฝ์ฐ์๋ upload๋ฅผ ํ์ง ์์ ๊ฒ์ด๊ณ , thumbnail ๋ฐ detail img๊ฐ ์๋ฌด๊ฒ๋ ์กด์ฌํ์ง ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก, if๋ฌธ์ผ๋ก ์กด์ฌ์ฌ๋ถ๋ฅผ ํ์ ํ์ฌ ์๋ค๋ฉด upload ์ํค๋๋ก ์์ ์ ํด์ฃผ์๋ค.
๐ ๋ฑ๋ก๋ ๋์ผํ๊ฒ if๋ฌธ์ผ๋ก ์ฒ๋ฆฌํด์ค๋ค.
ํ์ง๋ง, ์์ ์ ํ์ง ์๋ ๊ฒฝ์ฐ์๋ if๋ฌธ์ด ๋์ํ์ง ์๊ณ , ์ต์ข ์ ์ผ๋ก update_one ํจ์๊ฐ ์คํ๋ ๋ thumbnail_img_url ๋ฐ detail_img_url ์ ์ ์ํ ์ ์์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ํฉ์ ์๋ฐฉํ๊ธฐ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์๋ฅผ ํด๋์ด์ undefined ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ๋ณ์๋ฅผ ์ ์ํด ๋์๋ค.
๊ทธ ํ, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ์ ์ฅํด์ผ ํ๋ฏ๋ก update_one ์ด๋ผ๋ ํจ์๋ฅผ ๋ง๋ค์ด ์ ์ฅํ๊ฒ ๋ค.
ํ์ํ data๋ ์ด๋ค ์ํ์ ์ญ์ ํ ์ง ํ์ ํด์ผ ํ๋ฏ๋ก ๊ณ ์ id๊ฐ๊ณผ(product_id), form_data, thumbnail_img_url ๊ณผ detail_img_url ๊ฐ์ ๋ฐ์์ค๊ฒ ๋ค.
- update_one ํจ์ ์์ฑ (models > product.py)
๐ update_one ํจ์ ์์ฑ(์์ฒญํ data๊ฐ ๋ฐ์์ด) ๋ฐ mongodb connect
๐ ์์ฑ์ ๊ฒฝ์ฐ insert_one์ผ๋ก ์ ๋ณด๋ค์ ์ ์ฅํ์์ผ๋, update_one ํจ์๋ฅผ ์ฌ์ฉํ์ฌ $set ๋ถ๋ถ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๐ ์ด๋ค document(์ํ)์ ์์ ํ ๊ฒ์ธ์ง ๊ตฌ๋ถ์ด ํ์ํ๋ฏ๋ก, ์ ๋ฌ๋ฐ์ ObjectId ๊ฐ์ผ๋ก product id๋ฅผ ์ฐพ๋๋ค.
๐ ๊ธฐ์กด์ ์ ๋ณด์ ์๋ก ๋ค์ด์จ ์ ๋ณด๋ค์ด ๊ตฌ๋ณ๋์ด ์ ์ฅ๋์ด์ผ ํ๋ค.
(์์ ํ๋ ์ฌ๋์ ์ ์ฅ์์๋ data๋ฅผ ๋ณ๊ฒฝํ์ง ์์ ์๋ ์์ผ๋ฏ๋ก ๋น๊ฐ์ผ๋ก update ๋์ง ์๋๋ก ํด์ค๋ค.)
๐ img ์ฒ๋ฆฌ
์ด๋ฏธ์ง๊ฐ ์กด์ฌํ๋ค๋ฉด, new_product ์ img๋ฅผ url ๋ก ์์ ํด์ค๋ค. ์ฆ, ์๋ก์ด ์์ ๋ img ์ url๊ฐ์ ๋ฃ์ด์ค๋ค๋ ์๋ฏธ์ด๋ค.
๐ return ๊ฐ ์์ฑ
์ํ page ์์ฑ
๐ ์ํ ์ ๋ณด ์์ ํ์ด์ง API ์์ฑ = ์ด๋ค ์ํ์ ์์ ํ ์ง ํ์ ํด์ผ ํ๋ฏ๋ก ๊ณ ์ id๊ฐ/edit ์ผ๋ก ์ฃผ์๋ฅผ ์ ์ํ์๋ค.
find_one ์ด๋ ์์ page์ ์ ์ํ์ ๋ ์ด๋ค ์ ๋ณด๊ฐ ๊ธฐ์กด์ ์์ฑ์ด ๋์ด์๋์ง ํ์ธ ํ ์์ ์ ๊ฑฐ์ณ์ผํ๋ฏ๋ก id๊ฐ์ ๋๊ฒจ์ document๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ด๋ค.
๐ models > product.py -> find_one ์์ฑ
= id๊ฐ ๋ฐ db ์ฌ์ฉํ๊ฒ ๋ค๊ณ ์ ์ธํ์๋ค. ์ฆ, _id๊ฐ ๋๊ฒจ์ค id๊ณผ ๊ฐ์ document๋ฅผ ์ฐพ์์ ๊ฐ์ ธ์จ๋ค.
๊ทธ ํ, product document๋ฅผ return ์ (controllers > product.py)
return ๋ฐ์ document๋ก html file๊ณผ ํจ๊ป web browser์ ๋ณด์ฌ์ง ๊ฒ์ด๋ค.
๐ Compass ์ ์ ๋ฐ product document id๊ฐ ์ฃผ์์ฐฝ ์ ๋ ฅ
= html file์ ์ถ๋ ฅ๊ตฌ๋ฌธ์ ์์ฑํ์๋ค๋ฉด, ํด๋น product document์ ์ ๋ณด๊ฐ์ด ์ถ๋ ฅ ๋ ๊ฒ์ด๋ค.
๐ product_edit.html file ์ปค์คํ
= ๋ฑ๋กํผ๊ณผ ์ ์ฌํ ๊ตฌ์กฐ ๋ฐ ์คํ์ผ์ด๋ฉฐ, ๋ฑ๋ก๊ณผ ๋ค๋ฅธ ๋ถ๋ถ์ input์ data๊ฐ ํฌํจ๋ ์ํ์ธ ๊ฒ์ด๋ค.data๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์๋ name์ผ๋ก ์์๋ฅผ ๋ค์๋ฉด value="{{product['name']}}" ๊ฐ์ ์ถ๊ฐ์์ผ์ฃผ๋ฉด ๊ฐ์ ธ์จ data๊ฐ์ด ๋ฟ๋ ค์ง๋ค.
update ๋ฅผ ํด๋ฆญ ์ action ๊ฐ์ /products/{{product['_id']}}/update ์ฃผ์๋ก ์ ๋ฌ๋๊ณ controllers > product.py -> ์ํ ์ ๋ณด ์์ API๊ฐ ํธ์ถ์ด ๋๋ฉด์ return ๊ฐ ๋ํ ์ถ๋ ฅ ๋ ๊ฒ์ด๋ค.
๐update ํ list page ์ด๋ ๋ฐ import
= redirect๋ฅผ product ์์ ์๋ get_products ํจ์๋ฅผ ํธ์ถ์์ผ์ค๋ค๋ ์๋ฏธ์ด๋ค.
์ฆ, ์์ ์ด ๋๋ฉด ์ํ ๋ฆฌ์คํธ ์กฐํ page ๋ก ์ด๋์์ผ์ค๋ค๋ ์ฝ๋์ด๋ค.= ์ด์ ๊ฐ์ด ์ ์์ ์ผ๋ก list page๋ก redirect๋จ๊ณผ ๋์์ data๊ฐ ์์ ๋ ๋ถ๋ถ์ ํ์ธํ ์ ์๋ค.
๐ list_page์ edit ๋ฒํผ์๋ /products/{{product['_id']}}/edit edit ํ์ด์ง๋ก ์ด๋์์ผ์ฃผ๋ ๋งํฌ๋ฅผ ์ถ๊ฐ์์ผฐ๋ค.
์ค๋๋ฐ๋ผ ์ง์ค์ด ์ ๋์ง์์ ๋ฑ๋ก๊ณผ ๊ฑฐ์ ์ ์ฌํ ๋ถ๋ถ์ด ๋ง์์์๋ ๋ถ๊ตฌํ๊ณ ๋ช๋ฒ์ด๊ณ ๋ฐ๋ณตํด์ ๋ค์๋ ๊ฒ ๊ฐ๋ค ๐ตโ๐ซ
๊ทธ๋๋ ํ์คํ ์ดํด๋ฅผ ํ๊ณ ๋์ด๊ฐ ์ ์์ด ๋คํ์ธ ๊ฒ ๊ฐ๋ค ^^...........
๋ค์ ์๊ฐ์๋ ์ํ detail page๋ฅผ ์์ ํด ๋ณด๊ฒ ๋ค.