๐Ÿฆ Python Online Store ๋งŒ๋“ค๊ธฐ 13ํŽธ - ํšŒ์›๊ฐ€์ž…

yohan-record[web]ยท2022๋…„ 8์›” 8์ผ
0

python onlinestore ๊ฐœ๋ฐœ์ผ์ง€

๋ชฉ๋ก ๋ณด๊ธฐ
13/25
post-thumbnail

๐ŸŽˆ Front End Developer ์˜ Back End ๋„์ „๊ธฐ ! ๐ŸŽˆ

์ด ๊ธ€์€ PROJECT LION : ํ˜ธ์ฝ”์น˜ ๊ฐ•์‚ฌ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ์ฐธ๊ณ ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ž‘์—… ์ค‘, ๊ฐœ๋ฐœ๊ณผ์ • ์ •๋ฆฌ ๋ฐ issue๊ฐ€ ๋˜์—ˆ๋˜ ๋ถ€๋ถ„๋“ค์„ ๊ณต์œ  ๋ฐ ๊ธฐ๋กํ•˜๊ณ ์ž ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1. ํšŒ์›๊ฐ€์ž…

โœ ์ž‘์—… ์ „, ์ƒˆ๋กœ์šด ์ƒํ’ˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋กœ์ง์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ํฌ๊ฒŒ ๋‹ค๋ฅผ ๊ฒŒ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ํšŒ์›๊ฐ€์ž…์€ ์ƒํ’ˆ ๋“ฑ๋ก๊ณผ ์œ ์‚ฌํ•˜๋‹ค. ์ƒํ’ˆ -> ์‚ฌ์šฉ์ž๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๊ณ , product์—์„œ ์‚ฌ์šฉํ•œ controllers ๋ฐ models ๋„ User๋กœ ์„ธํŒ…ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ƒˆ๋กœ์šด ์ƒํ’ˆ ๋“ฑ๋ก์ด ์•„๋‹Œ, ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๊ฐ€ ๋“ฑ๋กํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฆฌ๋ผ ํŒ๋‹จํ–ˆ๋‹ค.

  1. blueprint ๊ฒฝ๋กœ ์„ธํŒ…
    = products ์„ธํŒ… ์‹œ์™€ ๋™์ผํ•˜๊ฒŒ user๋„ ์ƒ์„ฑํ•ด์ค€๋‹ค.

  1. controllers > product.py copy ํ›„ user.py ์ƒ์„ฑ

  1. ์‚ฌ์šฉํ•˜๋Š” import ๋งŒ ๋‚จ๊ฒจ๋‘๊ณ , product ๊ฐ’์€ user๋กœ ๋ณ€๊ฒฝ

  1. models > product.py copy ํ›„ user.py ์ƒ์„ฑ
    = product๊ฐ€ ์•„๋‹Œ, user class ์ƒ์„ฑ (3๋ฒˆ ํ•ญ๋ชฉ์˜ 3๋ฒˆ์งธ ์ค„ models > user.py ์˜ User Class ๊ฐ€ import ๋˜๋Š” ๊ฒƒ์ด๋‹ค.)

  1. app.py -> user blueprint ๋“ฑ๋ก

  1. ํšŒ์›๊ฐ€์ž… ๋“ฑ๋ก ํŽ˜์ด์ง€ API ์ƒ์„ฑ
    = /users/form ์ž…๋ ฅ ์‹œ users/product_form.html ๋žœ๋”๋ง

  1. ํšŒ์›๊ฐ€์ž… data ์ „๋‹ฌ ๋ฐ ์š”์ฒญ API ์ƒ์„ฑ
    = form_data๋ฅผ User class์— insert ์‹œ์ผœ์ค€๋‹ค.(/models/user.py)

  1. models > user.py insert_one ์ˆ˜์ •
    = ์ง€๊ธˆ๊นŒ์ง€์˜ ํ๋ฆ„๋„๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค

ํšŒ์›๊ฐ€์ž… ์ •๋ณด ์ž…๋ ฅ ํ›„ ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ /users/signup ์ฃผ์†Œ๋กœ ๋„˜์–ด๊ฐ๊ณผ ๋™์‹œ์— post๋ฐฉ์‹(ํšŒ์›์ •๋ณด๊ฐ€ ์ฃผ์†Œ์ฐฝ์— ๋ณด์—ฌ์ง€๋Š”๊ฒƒ์€ ์˜ณ์ง€ ์•Š์Œ) ์œผ๋กœ User Class์— form_data๋ฅผ ๋˜์ ธ์ค€๋‹ค.

๊ทธ๋Ÿผ, User Class์˜ insert_one์—์„œ form_data๋ฅผ ๋ฐ›์•„ ํ•ด๋‹น ์ •๋ณด๋“ค์„ users collection์œผ๋กœ ์ƒ์„ฑ ํ›„ document๋ฅผ ์ง‘์–ด๋„ฃ์–ด์ค€๋‹ค.


  1. templates > user_form.html file ์ƒ์„ฑ
    = ํŒŒ์ผ ์ƒ์„ฑ ํ›„ form์œผ๋กœ ๋„˜์–ด๊ฐˆ action ๊ฐ’์„ signup(controllers/user.py ์— ๋งŒ๋“ค์–ด ๋‘” ๊ฒฝ๋กœ) ๋กœ ์ „์†ก ๋ฐ ํ•ญ๋ชฉ์— ๋งž๊ฒŒ form ๋‚ด๋ถ€ input ๊ฐ’ ๋ณ€๊ฒฝ

  1. data ์ „์†ก ํ›„ ํ™•์ธ(mongodb compass)
    = ๊ฐ€์ž…ํ•˜๊ณ ์ž ํ•˜๋Š” ์ด๋ฉ”์ผ ๋ฐ ํŒจ์Šค์›Œ๋“œ ์ž…๋ ฅ ํ›„ form๊ฐ’์„ ์ „์†ก ์‹œ(๋ฒ„ํŠผ ํด๋ฆญ ์‹œ) db์— users collection ์ƒ์„ฑ ๋ฐ ์ „์†กํ•œ data ๊ฐ’์ด ๋“ค์–ด์˜ค๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ, password ์™€ password ํ™•์ธ์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ์—๋„ ํšŒ์›๊ฐ€์ž…์ด ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์กŒ์„ ๊ฒƒ์ด๋ฉฐ, ๊ฐ™์€ email ๋กœ ํšŒ์›๊ฐ€์ž… ์‹œ์—๋„ ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ data๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ form ๊ฐ’์„ ๋„˜๊ธธ ๊ฒฝ์šฐ์—๋„ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

๋‹น์—ฐํ•˜๋‹ค. ๋‚ด๊ฐ€ ๋ณ„๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ–ˆ๋‹ค(?)
์ด์ œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋ณด๊ฒ ๋‹ค ๐Ÿ˜‰


  1. data ์œ ๋ฌด ๋ฐ ์ค‘๋ณต๊ฒ€์‚ฌ ์ฒดํฌ
    = ๊ฐ„๋‹จํ•˜๊ฒŒ if๋ฌธ์œผ๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋„˜์–ด๊ฐ€์ง€ ๋ชปํ•˜๊ฒŒ ๋ฐฉ์ง€ํ•˜์˜€๊ณ , html ์ฝ”๋“œ ์ƒ์—์„œ required ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ ํ•„์ˆ˜์ ์œผ๋กœ ์ž…๋ ฅํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•ด ๋‘์—ˆ๋‹ค.

    ํ•˜์ง€๋งŒ, ์ด๋ฉ”์ผ ์ฒดํฌ์˜ ๊ฒฝ์šฐ๋Š” form_data์˜ ์ด๋ฉ”์ผ ์กด์žฌ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•œ ํ›„ data๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

    ์šฐ์„ , ๋น„๊ต๋ฌธ์„ ์ž‘์„ฑํ•œ๋‹ค.


= db์— ๊ฐ™์€ email์ด ๋“ค์–ด์˜จ ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํŒŒ์•… ํ›„,
๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด email์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋ฏ€๋กœ false ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์—†๋‹ค๋ฉด true๋ฅผ ๋ฐ˜ํ™˜์‹œํ‚จ๋‹ค.


  1. flash ์‚ฌ์šฉ

    = ๋งŒ์•ฝ flash๋ฅผ ํ˜ธ์ถœํ•œ message๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น message๋ฅผ alert ์ฐฝ์œผ๋กœ ๋„์›Œ์ค€๋‹ค. (flash ๊ตฌ๋ฌธ 11๋ฒˆ ์ฐธ์กฐ)

    ๐Ÿ”– ๊ตฌ๋ฌธ ์ค‘ % ์™€ { ๋˜๋Š” } ์‚ฌ์ด์— ๊ณต๋ฐฑ์ด ์—†์–ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ error ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. ๐Ÿ˜ตโ€๐Ÿ’ซ

session์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, secret key๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ, app.py์—์„œ secret_key๋ฅผ ์„ค์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
๊ทธ ํ›„, user_form ์— ๋งŒ๋“  alert ๊ฐ€ ๋ถˆ๋ฆด ์ˆ˜ ์žˆ๋„๋ก, flash ํ•˜๋‹จ์— ๊ฐ๊ฐ render ์‹œ์ผœ์ค€๋‹ค.


  1. ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ ํ›„ list page ์ด๋™
    = ์šฐ์„  product blueprint ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. redirect ๋ฅผ ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” product ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

= redirect ์‹œ ํ•„์š”ํ•œ redirect ๋ฐ url_for import


= products redirect

์ด๋กœ์จ ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ์‹œ form data๊ฐ€ ์ „์†ก๋˜๋ฉฐ ๋ช‡๊ฐ€์ง€ ๊ตฌ๋ฌธ์œผ๋กœ ๊ฐ’ ๋น„๊ต ํ›„ db์— ์ €์žฅ๋  ๊ฒƒ์ด๋‹ค ๐ŸŽ‰

๋‹ค์Œ์‹œ๊ฐ„์—๋Š” ์ €์žฅ๋œ member ๊ฐ’์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•ด ๋ณด๊ฒ ๋‹ค.

profile
๐Ÿฑโ€๐Ÿ Front End Developer

0๊ฐœ์˜ ๋Œ“๊ธ€