๐Ÿฆ Python Online Store ๋งŒ๋“ค๊ธฐ 7ํŽธ - web browser ์ƒํ’ˆ๋“ฑ๋ก

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

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

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

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

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

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

1. ์ƒํ’ˆ๋“ฑ๋ก

โœ form > input ๊ฐ’์— ๋งž๊ฒŒ ์ƒํ’ˆ์ด๋ฆ„, ๊ฐ€๊ฒฉ, ์„ค๋ช…, ์ด๋ฏธ์ง€ ๋“ฑ ์ฒจ๋ถ€ ํ›„ ๋“ฑ๋ก๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ ๊ฐ’์ด ์ „์†ก๋˜๋Š” logic์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.

  1. API ์ƒ์„ฑ
    = get ๋ฐฉ์‹(default)์œผ๋กœ form์„ ํ˜ธ์ถœ ์‹œ ๋“ฑ๋ก ํ™”๋ฉด์ด ๋ณด์ด๋„๋ก ํ˜ธ์ถœํ•˜๋Š” API๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์ฆ‰, /form ์ฃผ์†Œ๋กœ flask ์š”์ฒญ์„ ํ•˜๊ฒŒ ๋˜๋ฉด, product_form.html file์„ ๋ฐ˜ํ™˜ํ•ด ์ฃผ๊ฒ ๋‹ค๋Š” ์ฝ”๋“œ์ด๋‹ค.

    ๐Ÿ”– render template ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ, import ํ•„์š”ํ•จ
    -> from flask import request, render_template


  1. templates folder ์ƒ์„ฑ ๋ฐ > product_form.html ์ƒ์„ฑ
    = browser ์ƒ์œผ๋กœ ํ™•์ธ์„ ํ•ด๋ณด๊ธฐ์— ์•ž์„œ, /form์„ mapping ์‹œ์ผœ๋‘์—ˆ์ง€๋งŒ, ์•ž์ „์— blueprint๋กœ ์ฃผ์†Œ์ฐฝ ์•ž์— /products ๋ฅผ ์žก์•„๋‘์—ˆ์œผ๋ฏ€๋กœ, ์‹ค์งˆ์ ์ธ ์ฃผ์†Œ๋Š” "/products/form" ์„ ์ž…๋ ฅ ์‹œ ํ˜ธ์ถœ ๋  ๊ฒƒ์ด๋‹ค.

  1. html ํƒœ๊ทธ ์ž‘์„ฑ
    = ์ƒํ’ˆ ๋“ฑ๋ก ๋ฒ„ํŠผ์„ submit์œผ๋กœ ์ „์†ก ์‹œ, /products/regist ์ฃผ์†Œ๊ฐ’์œผ๋กœ ๋“ฑ๋ก์„ ์š”์ฒญํ•œ ๊ฐ’์ด ์ „๋‹ฌ๋œ๋‹ค.

    ๊ฐ’์ด ์ฃผ์†Œ์ฐฝ์— ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” privacy ํ•œ ๊ฒƒ์ด ๋‚˜์œผ๋ฏ€๋กœ post๊ฐ’์œผ๋กœ ์ „์†กํ•˜๋ฉฐ upload(img) ์ž…๋ ฅ๊ฐ’๋„ ํฌํ•จ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ multipart ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.


  1. ์ „์†ก ๊ฐ’ ํ™•์ธ(error - ๊ฐ input์— name ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ)
    ๐Ÿงจ 3๋ฒˆ ์ด๋ฏธ์ง€์—์„œ๋Š” ๊ฐ input๋งˆ๋‹ค name๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ •์ƒ์ ์œผ๋กœ ๊ฐ’์ด ์ „์†ก๋˜๊ณ , db์— ์ €์žฅ๋˜์ง€๋งŒ name๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์•˜๋‹ค.๐Ÿงจ
    = nonetype ๋ฐ filename error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. product controller์—์„œ filename์ด ์กด์žฌํ•˜๋Š”๋ฐ, upload ์‹œ filename์ด ์—†๋‹ค๋Š” error ์ธ ๊ฒƒ์ด๋‹ค.

์ฆ‰, ๊ฐ’์ด ์ „๋‹ฌ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ ์ž…๋ ฅ๊ฐ’์ด ์–ด๋– ํ•œ ๋ณ€์ˆ˜๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ „๋‹ฌ์ด ๋˜์–ด์•ผํ•˜๋Š”๋ฐ, ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์•„ ์ „๋‹ฌ๋ฐ›์„ ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๊ณ  ์ธ์‹์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

request.form์œผ๋กœ ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ, ํ•ด๋‹น name์„ ์ฐพ์•„์„œ ์ „์†ก๋ฐ›์€ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.


  1. ์ „์†ก๊ฐ’ ์ž…๋ ฅ ๋ฐ ํ™•์ธ(success)
    = name๊ฐ’์„ ๊ฐ๊ฐ ๋ถ€์—ฌํ•œ ํ›„, db์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด data ๊ฐ’์„ ์ „์†ก ์‹œ ์ €์žฅ๋˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โŒ› ํ˜„์žฌ ๋“ฑ๋ก ํผ์€ ์•„๋ฌด๋Ÿฐ ์Šคํƒ€์ผ๋„ ์žกํ˜€์žˆ์ง€ ์•Š๋Š” html ๊ตฌ์กฐ์ด๋‹ค.

์ด ํผ์„ css(์•„๋งˆ bootstrap์„ ์‚ฌ์šฉํ•  ์˜ˆ์ •) ๋กœ ์Šคํƒ€์ผ ์ž‘์—…์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ํ˜„์—…์— ํฌํ•จ๋˜์–ด์žˆ๋Š” ์ž‘์—…๋‚ด์šฉ์ด๋ผ ๋”ฐ๋กœ ๊ณต๋ถ€ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

๋ณ„๋„์˜ ๊ณผ์ •์„ค๋ช… ์—†์ด ์ž‘์—… ํ›„ ๊ฒฐ๊ณผ๋ฌผ๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฒ ๋‹ค.โŒ›

2. ๊ฒฐ๊ณผ

= ๋ณด์ด๋Š” ๋ฐ”์™€ ๊ฐ™์ด ๊น”๋”ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด ๋‚ด์—ˆ๋‹ค. bootstrap์„ ์ด์šฉํ•˜์—ฌ ์ž‘์—…ํ•˜์˜€๋Š”๋ฐ, ๋‚˜๋Š” bootstrap์„ ํ˜„์—…์—๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋‹ค์ง€ ์„ ํ˜ธํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹จ์ˆœํ•œ ํ”„๋กœ์ ํŠธ์ธ ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณด์ด๋Š” ๋ฐ”์™€ ๊ฐ™์ด ํด๋ž˜์Šค๋งŒ ๋•ก๊ฒจ์„œ ์Šคํƒ€์ผ์„ ๊ตฌ์ถ•ํ•ด ๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ..

  1. ์‹ค์งˆ์ ์ธ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ์‹œ์•ˆ์€ boostrap์„ ํ™œ์šฉํ•˜๊ธฐ์— ์–ด๋ ต๋‹ค.
  2. ๊ธฐ์กด ์ดˆ๊ธฐํ™” ์ฝ”๋“œ์ธ reset๊ณผ ๊ฒน์น˜๋Š” class๊ฐ€ ๋งŽ๋‹ค.

์žฅ์ ๋„ ๋ฌผ๋ก  ๋›ฐ์–ด๋‚˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ์— ์žˆ์–ด์„œ ๋‹จ์ ์ด ๋” ๋งŽ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ css ๋ฐ sass๋ฅผ ํ™œ์šฉํ•˜์—ฌ component๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  module ๋ณ„๋กœ ๋•ก๊ฒจ์“ฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋‹ค.

์ด์™€ ๊ฐ™์ด ์ƒํ’ˆ ๋“ฑ๋ก์„ browser ์ƒ์—์„œ ํ™•์ธํ•ด ๋‚ด์—ˆ๊ณ ,
๋‹ค์Œ ๊ณผ์ •์€ ์ƒํ’ˆ๋“ฑ๋ก์œผ๋กœ ์ €์žฅํ•œ ์ƒํ’ˆ์„ list page์— ๋ฟŒ๋ ค๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

์ด์ œ ์ ์  ์žฌ๋ฐŒ์–ด์ง€๊ณ  ์žˆ๋‹ค!!!!!๐Ÿ˜Ž๐Ÿ˜Ž

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

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