๐ Front End Developer ์ Back End ๋์ ๊ธฐ ! ๐
์ด ๊ธ์ PROJECT LION : ํธ์ฝ์น ๊ฐ์ฌ๋์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฐธ๊ณ ํ ๊ธ์ ๋๋ค.
์์ ์ค, ๊ฐ๋ฐ๊ณผ์ ์ ๋ฆฌ ๋ฐ issue๊ฐ ๋์๋ ๋ถ๋ถ๋ค์ ๊ณต์ ๋ฐ ๊ธฐ๋กํ๊ณ ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
โ ์์ ์ , ์๋ก์ด ์ํ์ ๋ฑ๋กํ๋ ๋ก์ง์ฒ๋ผ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ๋ฑ๋กํ๋ฉด ํฌ๊ฒ ๋ค๋ฅผ ๊ฒ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ํ์๊ฐ์ ์ ์ํ ๋ฑ๋ก๊ณผ ์ ์ฌํ๋ค. ์ํ -> ์ฌ์ฉ์๊ฐ ๋๋ ๊ฒ์ด๊ณ , product์์ ์ฌ์ฉํ controllers ๋ฐ models ๋ User๋ก ์ธํ ํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
์๋ก์ด ์ํ ๋ฑ๋ก์ด ์๋, ์๋ก์ด ์ฌ์ฉ์๊ฐ ๋ฑ๋กํ๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์ผ๋ฆฌ๋ผ ํ๋จํ๋ค.
- blueprint ๊ฒฝ๋ก ์ธํ
= products ์ธํ ์์ ๋์ผํ๊ฒ user๋ ์์ฑํด์ค๋ค.
- controllers > product.py copy ํ user.py ์์ฑ
- ์ฌ์ฉํ๋ import ๋ง ๋จ๊ฒจ๋๊ณ , product ๊ฐ์ user๋ก ๋ณ๊ฒฝ
- models > product.py copy ํ user.py ์์ฑ
= product๊ฐ ์๋, user class ์์ฑ (3๋ฒ ํญ๋ชฉ์ 3๋ฒ์งธ ์ค models > user.py ์ User Class ๊ฐ import ๋๋ ๊ฒ์ด๋ค.)
- app.py -> user blueprint ๋ฑ๋ก
- ํ์๊ฐ์ ๋ฑ๋ก ํ์ด์ง API ์์ฑ
= /users/form ์ ๋ ฅ ์ users/product_form.html ๋๋๋ง
- ํ์๊ฐ์ data ์ ๋ฌ ๋ฐ ์์ฒญ API ์์ฑ
= form_data๋ฅผ User class์ insert ์์ผ์ค๋ค.(/models/user.py)
- models > user.py insert_one ์์
= ์ง๊ธ๊น์ง์ ํ๋ฆ๋๋ฅผ ์ดํดํ๊ณ ๋์ด๊ฐ๋ ค๊ณ ํ๋คํ์๊ฐ์ ์ ๋ณด ์ ๋ ฅ ํ ํ์๊ฐ์ ๋ฒํผ ํด๋ฆญ ์ /users/signup ์ฃผ์๋ก ๋์ด๊ฐ๊ณผ ๋์์ post๋ฐฉ์(ํ์์ ๋ณด๊ฐ ์ฃผ์์ฐฝ์ ๋ณด์ฌ์ง๋๊ฒ์ ์ณ์ง ์์) ์ผ๋ก User Class์ form_data๋ฅผ ๋์ ธ์ค๋ค.
๊ทธ๋ผ, User Class์ insert_one์์ form_data๋ฅผ ๋ฐ์ ํด๋น ์ ๋ณด๋ค์ users collection์ผ๋ก ์์ฑ ํ document๋ฅผ ์ง์ด๋ฃ์ด์ค๋ค.
- templates > user_form.html file ์์ฑ
= ํ์ผ ์์ฑ ํ form์ผ๋ก ๋์ด๊ฐ action ๊ฐ์ signup(controllers/user.py ์ ๋ง๋ค์ด ๋ ๊ฒฝ๋ก) ๋ก ์ ์ก ๋ฐ ํญ๋ชฉ์ ๋ง๊ฒ form ๋ด๋ถ input ๊ฐ ๋ณ๊ฒฝ
- data ์ ์ก ํ ํ์ธ(mongodb compass)
= ๊ฐ์ ํ๊ณ ์ ํ๋ ์ด๋ฉ์ผ ๋ฐ ํจ์ค์๋ ์ ๋ ฅ ํ form๊ฐ์ ์ ์ก ์(๋ฒํผ ํด๋ฆญ ์) db์ users collection ์์ฑ ๋ฐ ์ ์กํ data ๊ฐ์ด ๋ค์ด์ค๊ฒ ๋๋ค.ํ์ง๋ง, password ์ password ํ์ธ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ์๋ ํ์๊ฐ์ ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก์ ๊ฒ์ด๋ฉฐ, ๊ฐ์ email ๋ก ํ์๊ฐ์ ์์๋ ์ ์์ ์ผ๋ก ์งํ๋์์ ๊ฒ์ด๋ค. ๋ํ data๋ฅผ ์ ๋ ฅํ์ง ์์ ์ํ์์ form ๊ฐ์ ๋๊ธธ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ๋ ๊ฒ์ด๋ค.
๋น์ฐํ๋ค. ๋ด๊ฐ ๋ณ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ์ํ๋ค(?)
์ด์ ์ฒ๋ฆฌ๋ฅผ ํด๋ณด๊ฒ ๋ค ๐
data ์ ๋ฌด ๋ฐ ์ค๋ณต๊ฒ์ฌ ์ฒดํฌ
= ๊ฐ๋จํ๊ฒ if๋ฌธ์ผ๋ก ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ ๋์ด๊ฐ์ง ๋ชปํ๊ฒ ๋ฐฉ์งํ์๊ณ , html ์ฝ๋ ์์์ required ๋ฅผ ์ฌ์ฉํจ์ผ๋ก ํ์์ ์ผ๋ก ์ ๋ ฅํ๋๋ก ์ฒ๋ฆฌํด ๋์๋ค.ํ์ง๋ง, ์ด๋ฉ์ผ ์ฒดํฌ์ ๊ฒฝ์ฐ๋ form_data์ ์ด๋ฉ์ผ ์กด์ฌ์ฌ๋ถ๋ฅผ ํ์ ํ ํ data๋ฅผ ๋น๊ตํ์ฌ ์ฒ๋ฆฌํด์ผ ํ๋ค.
์ฐ์ , ๋น๊ต๋ฌธ์ ์์ฑํ๋ค.
= db์ ๊ฐ์ email์ด ๋ค์ด์จ ๊ฒ์ด ์๋์ง ํ์ ํ,
๋ง์ฝ ์๋ค๋ฉด email์ ์ฌ์ฉํ๋ฉด ์๋๋ฏ๋ก false ๊ฐ์ ๋ฐํํ๊ณ , ์๋ค๋ฉด true๋ฅผ ๋ฐํ์ํจ๋ค.
flash ์ฌ์ฉ
= ๋ง์ฝ flash๋ฅผ ํธ์ถํ message๊ฐ ์กด์ฌํ๋ค๋ฉด ํด๋น message๋ฅผ alert ์ฐฝ์ผ๋ก ๋์์ค๋ค. (flash ๊ตฌ๋ฌธ 11๋ฒ ์ฐธ์กฐ)๐ ๊ตฌ๋ฌธ ์ค % ์ { ๋๋ } ์ฌ์ด์ ๊ณต๋ฐฑ์ด ์์ด์ผ ํ๋ค.
ํ์ง๋ง error ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค. ๐ตโ๐ซ
session์ ์ฌ์ฉํ์ฌ ์์ ํ๋ ๊ฒ์ธ๋ฐ, secret key๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก, app.py์์ secret_key๋ฅผ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
๊ทธ ํ, user_form ์ ๋ง๋ alert ๊ฐ ๋ถ๋ฆด ์ ์๋๋ก, flash ํ๋จ์ ๊ฐ๊ฐ render ์์ผ์ค๋ค.
- ํ์๊ฐ์ ์๋ฃ ํ list page ์ด๋
= ์ฐ์ product blueprint ๋ฅผ ๊ฐ์ ธ์จ๋ค. redirect ๋ฅผ ์ํค๊ธฐ ์ํด์๋ product ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
= redirect ์ ํ์ํ redirect ๋ฐ url_for import
= products redirect
์ด๋ก์จ ํ์๊ฐ์ ๋ฒํผ์ ๋๋ฅผ ์ form data๊ฐ ์ ์ก๋๋ฉฐ ๋ช๊ฐ์ง ๊ตฌ๋ฌธ์ผ๋ก ๊ฐ ๋น๊ต ํ db์ ์ ์ฅ๋ ๊ฒ์ด๋ค ๐
๋ค์์๊ฐ์๋ ์ ์ฅ๋ member ๊ฐ์ ํ์ฉํ๊ธฐ ์ํด ๋ก๊ทธ์ธ์ ๊ตฌํํด ๋ณด๊ฒ ๋ค.