๐Ÿฆ Python Online Store ๋งŒ๋“ค๊ธฐ 18ํŽธ - ์ƒํ’ˆ๊ตฌ๋งค

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

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

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

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

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

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

1. ์ƒํ’ˆ๊ตฌ๋งค ํ”„๋กœ์„ธ์Šค

โœ ์ƒํ’ˆ ๊ตฌ๋งค์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ์ˆœ์„œ๋ฅผ ๊ทธ๋ ค๋ณด๊ณ  ์ดํ•ดํ•œ ํ›„ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ๋Œ€๋žต์ ์ธ ์ˆœ์„œ๋ฅผ ๊ตฌ์„ฑํ•ด๋ณด์•˜๋‹ค.

์šฐ์„  (1) ์ƒํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ ‘์† ํ›„ -> (2)๊ตฌ๋งคํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ์‹œ -> (3)์ฃผ๋ฌธ์ž ์ •๋ณด ์ž…๋ ฅ page๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๊ณ ,

(4)์ฃผ๋ฌธ์ž ์ •๋ณด ์ž…๋ ฅ ํ›„ ๊ฒฐ์ œ๋ฅผ ํด๋ฆญ ์‹œ -> (5)๊ฒฐ์ œ์ฐฝ ๋ฐ ๊ฒฐ์ œ์™„๋ฃŒ ํŽ˜์ด์ง€๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

๊ทธ ํ›„, (6)์ƒํ’ˆ๊ตฌ๋งค์™„๋ฃŒ ํŽ˜์ด์ง€๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉฐ -> (7)๊ตฌ๋งค์ƒํ’ˆ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  -> (8)๊ตฌ๋งค ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ํ˜•์‹์ด๋‹ค.

์ €์žฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—ญ์‹œ ํฌ๊ฒŒ ์ƒ๊ฐํ•ด ๋ณธ๋‹ค๋ฉด,
(1) ๊ฒฐ์ œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ฃผ๋ฌธ์ •๋ณด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  -> (2)์ƒํ’ˆ ๊ตฌ๋งค ์™„๋ฃŒ ์‹œ ์ฃผ๋ฌธ ์ •๋ณด์—์„œ ์ฃผ๋ฌธ ์ƒํƒœ ๊ฐ’์„ update ์‹œ์ผœ์ค€๋‹ค.

(3)๊ทธ ํ›„, ๊ฒฐ์ œ ๊ด€๋ จ ์ •๋ณด ๋ฐ›์•„์„œ -> (4)์ €์žฅ๋œ ์ฃผ๋ฌธ ์ •๋ณด๋กœ ๊ตฌ๋งค ์ƒํ’ˆ ๋ชฉ๋ก ๋ฐ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

๋Œ์•„๊ฐ€๋Š” ๋กœ์ง์€ ์ „๋ฐ˜์ ์œผ๋กœ ์ดํ•ดํ•˜์˜€๊ณ , ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์งœ๋ณด๋ฉด์„œ ๊นŠ๊ฒŒ ์ดํ•ดํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

๐Ÿ”– html ์ฝ”๋“œ ๋ฐ bootstrap์„ ํ™œ์šฉํ•œ ์Šคํƒ€์ผ ์ž‘์—…์˜ ์ƒ์„ธํ•œ ์„ค๋ช…์€ ํ‘œ๊ธฐํ•˜์ง€ ์•Š๊ฒ ๋‹ค.

โŒ› ์ฃผ๋ฌธ ํŽ˜์ด์ง€ ์ƒ์„ฑ

  1. ์ƒ์„ธํŽ˜์ด์ง€ > ๊ตฌ๋งคํ•˜๊ธฐ ๋ฒ„ํŠผ ์ƒ์„ฑ
    = ํ•ด๋‹น ๊ตฌ๋งคํ•˜๊ณ ์ž ํ•˜๋Š” ์ƒํ’ˆ์˜ ๊ณ ์œ id๊ฐ’์„ ๊ฐ€์ง€๊ณ  order ์ฃผ์†Œ(๊ตฌ๋งค ํŽ˜์ด์ง€)๋กœ ์ด๋™

  1. ๋ฒ„ํŠผ ๋ˆ„๋ฆด ์‹œ ์ฃผ๋ฌธ ๊ฐ€๋Šฅํ•œ ํŽ˜์ด์ง€ API ์ƒ์„ฑ(controllers > product.py)

    ๊ฐ’์„ ๊ฐ€์ง€๊ณ  render_template ์ฃผ์†Œ๋ฅผ order_form.html page๋กœ ์ด๋™์‹œํ‚จ๋‹ค. (์ฃผ๋ฌธ ํŽ˜์ด์ง€์—๋Š” ์ƒํ’ˆ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ product ๋„˜๊ฒจ์คŒ)

  1. order_form.html ์ƒ์„ฑ ๋ฐ ๊ตฌ์กฐ์ž‘์„ฑ
    = html ์ฝ”๋“œ ๊ตฌ์กฐ ๋ฐ bootstrap class๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ํผ์„ ์ƒ์„ฑํ•œ๋‹ค.

    ๐Ÿ“ ์ฃผ์˜ํ•  ์ ์€, ๊ฐ input์—๋Š” ๊ณ ์œ  id๊ฐ’ ๋ฐ name๊ฐ’์„ ์ด์šฉํ•ด ๊ฐ’์„ ์ „์†ก์‹œ์ผœ์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ, ์šฐํŽธ๋ฒˆํ˜ธ ์ฐพ๊ธฐ๋ฅผ ํด๋ฆญ ์‹œ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋Š” API์„ ๋‹ค์Œ์—์„œ ์ œ๊ณตํ•ด์ค€๋‹ค.

๋‹ค์Œ API ์˜ˆ์ œ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ(์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๊ฐ’ ์ด์šฉํ•˜๊ธฐ -> ์˜ˆ์ œ ์ฝ”๋“œ๋ณด๊ธฐ), onlinestore ์ฃผ๋ฌธ ํผ์— ๋งž์ถฐ input๊ฐ’ ๋ฐ button์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. (script๋Š” ๊ฑด๋“œ๋ฆด ๊ฒƒ์ด ์—†๋‹ค.)

โŒ› ์ฃผ๋ฌธ API ์ƒ์„ฑ ๋ฐ ๊ตฌํ˜„

  1. ์ฃผ๋ฌธ ์ƒ์„ฑ api
    = product์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ product_id๋ฅผ ๋ฐ›์€ ํ›„/order ๋ฐ post ๋ฐฉ์‹ ์ด์šฉ

    order ํ•จ์ˆ˜ํ˜• ์„ ์–ธ ๋ฐ product_id๋ฅผ ์ฃผ์†Œ์—์„œ ๋ฐ›์•„์˜จ๋‹ค.

    ๊ทธ ํ›„ product์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ product_id๋ฅผ ๊ฐ€์ง€๊ณ  ์ฐพ์•„์˜ฌ ๊ฒƒ์ด๋ฏ€๋กœ, ์ฃผ๋ฌธ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ ์ƒํ’ˆ์— ๋Œ€ํ•œ ์ •๋ณด ์—ญ์‹œ ์ €์žฅํ•œ๋‹ค.(์–ด๋–ค ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•œ์ง€ ํ™•์ธํ•ด์•ผํ•จ)


= input์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐฐ์†ก์ง€ ์ •๋ณด์™€ ์ฃผ๋ฌธ์ž ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ์‚ฌ์šฉ


= order collection์— insert_one์ด๋ผ๋Š” ํ•จ์ˆ˜๋กœ product์™€ form_data, user์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๊ฒƒ์ด๋‹ค. (order.py file์„ models ์— ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ์šฐ์„  Order ์‚ฌ์šฉ)

์ด user๋Š” check_login์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋ฏ€๋กœ(๋กœ๊ทธ์•„์›ƒ์—์„œ ์‚ฌ์šฉ) ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
= ๋งŒ์•ฝ ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด user์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ณ , ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด return ๊ฐ’์œผ๋กœ ๋Œ๋ ค๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค.

๐Ÿ”– check_login ๋ฐ redirect_to_signin_form ์‚ฌ์šฉ์œ„ํ•ด import ํ•„์š”


  1. models > order.py ์ƒ์„ฑ
    = order class ์ƒ์„ฑ ํ›„ db์—ฐ๊ฒฐ, insert_one method์— ์‚ฌ์šฉํ•˜์—ฌ product, form, user๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค.

๊ทธ ํ›„, form์—์„œ ์ „์†ก๋œ data๋“ค์„ ๋ฐ›์•„์™€์„œ db์— ์ €์žฅ์‹œํ‚จ๋‹ค.


  1. order ํ™œ์„ฑํ™”
    = ์ƒ์„ฑ์„ ํ–ˆ๋‹ค๋ฉด, ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ import๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

    ์ž‘์—…์„ ํ•˜๋ฉด์„œ ์ž์ฃผ ๊นŒ๋จน๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๊ณ , ๋ฐ˜๋“œ์‹œ import๊ฐ€ ํ•„์š”ํ•˜๋‹ค!!!!


  1. ์ฃผ๋ฌธ ์ƒ์„ฑ API > return ๊ฐ’ ์ƒ์„ฑ
    ๐Ÿ”– ํ˜„์žฌ ์ฃผ๋ฌธํ…Œ์ŠคํŠธ๋Š” ์ฃผ๋ฌธ์š”์ฒญ ์‹œ db์— ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ์šฉ๋„์ด๋ฏ€๋กœ, ๊ฐ’๋งŒ ์ œ๋Œ€๋กœ ์ „์†ก๋œ๋‹ค๋ฉด ์ฃผ๋ฌธ์™„๋ฃŒ ํŽ˜์ด์ง€๋กœ ์ด๋™์‹œํ‚ฌ ๊ฒƒ์ด๋‹ค.

    render_template ์š”์ฒญ ํ›„ payment_complete.html page๋กœ ์ด๋™์‹œ์ผœ์ค€๋‹ค.


  1. payment_complete.html ์ƒ์„ฑ
    = ์ฃผ๋ฌธ์™„๋ฃŒ title๋ฐ ๋‚ด์šฉ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํŽ˜์ด์ง€ ์ด๋™ ํ™•์ธ ์šฉ๋„๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

  1. form ์ „์†ก ๊ฐ’ ๋ณ€๊ฒฝ
    = ์–ด๋–ค ์ƒํ’ˆ์„ ๊ตฌ๋งคํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ณ ์œ  id๊ฐ’๊ณผ /order ๋กœ action๊ฐ’์„ ์š”์ฒญ์‹œํ‚จ๋‹ค.

  1. ์ฃผ๋ฌธ ์‹œ ๋น„๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ํ™•์ธ
    = ๋น„๋กœ๊ทธ์ธ ์œ ์ €๊ฐ€ ์ฃผ๋ฌธ ์‹œ ์ฃผ๋ฌธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†๋„๋ก API์—์„œ check๋ฅผ ํ•ด๋‘์—ˆ์œผ๋ฏ€๋กœ, ๋กœ๊ทธ์ธ ํ›„ ์ฃผ๋ฌธ์„ ํ•ด์•ผํ•œ๋‹ค.

  1. ์‹ค์ œ ์ฃผ๋ฌธ ํ…Œ์ŠคํŠธ
    = ์ฃผ์†Œ, ๊ตฌ๋งค์ž ์ด๋ฆ„, ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด๋ฅผ ๋‹ด์•„์„œ ์ฃผ๋ฌธํ•˜๊ธฐ(form ์ „์†ก) ๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ db์— data๋“ค์ด ์ €์žฅ๋œ๋‹ค.
    = ์ฃผ๋ฌธ ์š”์ฒญ ์‹œ ์ฃผ๋ฌธ์„ฑ๊ณต ํŽ˜์ด์ง€๋กœ ์ด๋™
    = ์‹ค์ œ๋กœ db์— order.py ์—์„œ ๋‹ด์€ data๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ์ฃผ๋ฌธ์ž๊ฐ€ ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ ํ›„ ์ฃผ๋ฌธ์„ ์š”์ฒญํ•  ์‹œ ์š”์ฒญ๋œ data๊ฐ’๋“ค์ด db์— ์ •์ƒ์ ์œผ๋กœ ๋‹ด๊ธฐ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ์ œ ๋ชจ๋“ˆ์€ ์ฃผ๋ฌธ์™„๋ฃŒ๋œ ๋ชฉ๋ก๊ณผ ์ƒ์„ธ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋Š” ํŽ˜์ด์ง€๊นŒ์ง€ ์ƒ์„ฑ ํ›„, ์ž‘์—…ํ•ด๋ณด๊ฒ ๋‹ค.

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ์ฃผ๋ฌธ์™„๋ฃŒ ๋ชฉ๋ก ๋ฐ ์ƒ์„ธ์ •๋ณด ํ™•์ธ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ฒ ๋‹ค.

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

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