๐Ÿฆ Python Online Store ๋งŒ๋“ค๊ธฐ 14ํŽธ - ๋กœ๊ทธ์ธ

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

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

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

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

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

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

1. ๋กœ๊ทธ์ธ

โœ ์ด๋ฉ”์ผ ํŒจ์Šค์›Œ๋“œ ์ฒดํฌ ํ›„ ๊ฐ’์ด ์œ ํšจํ•œ ๊ฒฝ์šฐ session id์™€ user id ๋ฅผ ์ €์žฅํ•˜๊ณ , session id๊ฐ’์„ web browser ์— ์ „๋‹ฌํ•œ๋‹ค.

์ดํ›„, web browser๋Š” ์š”์ฒญ์„ ํ•  ๋•Œ๋งˆ๋‹ค session id๊ฐ’์„ flask์— ์ „๋‹ฌํ•˜๊ณ  session id๊ฐ’์ด ์กด์žฌํ•˜๋ฉด login ์ƒํƒœ๋กœ ํŒ๋‹จํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ๋กœ๊ทธ์ธ API ์ƒ์„ฑ
    = route๋Š” /singin ์ฃผ์†Œ๊ฐ’ ๋ฐ singin ํ•จ์ˆ˜ ์ƒ์„ฑ. form_data๋„ ๋ฐ›์•„์˜จ๋‹ค.

  1. ๋ฐ›์€ form data๋ฅผ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ํŒ๋ณ„
    = sign_in ํ•จ์ˆ˜๋Š” form_data์˜ email๊ณผ password ๊ฐ’์„ checkํ•˜์—ฌ ์ •์ƒ์ ์ธ ๋กœ๊ทธ์ธ์ด๋ผ๋ฉด user ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด๊ณ , ์•„๋‹ˆ๋ผ๋ฉด ๋กœ๊ทธ์ธ์ด ์ œ๋Œ€๋กœ ์ž‘๋™๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฐ’์„ return ์‹œํ‚ฌ ๊ฒƒ์ด๋‹ค.

  1. models > user.py sign_in ํ•จ์ˆ˜์ƒ์„ฑ

  1. user ์ฐพ๊ธฐ
    = login ํ•  ์‹œ ์ „๋‹ฌ๋œ data email์ด documnet์— ์กด์žฌํ•œ๋‹ค๋ฉด users document์—์„œ ๊ฐ€์ ธ์™€์„œ user์— ๋‹ด๋Š”๋‹ค.

  1. ์กด์žฌ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ๋ฐฉ์‹
    = ๋งŒ์•ฝ email document data๊ฐ€ ์—†๋‹ค๋ฉด false๊ฐ’์„ return ํ•ด ์ค„๊ฒƒ์ด๊ณ , ์กด์žฌํ•œ๋‹ค๋ฉด ๋‹ค์Œ์ˆœ์„œ์ธ password๋ฅผ check ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

user์˜ password์™€ ์ „๋‹ฌ๋ฐ›์€ password ์˜ ๊ฐ’์ด ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด, return false๋ฅผ ์‹œ์ผœ์ค€๋‹ค.

๐Ÿ”– ํ˜„์žฌ check_password_hash ๋ผ๋Š” ๊ฐ’์€ db์— ์ €์žฅ๋  password๋ฅผ ์•”ํ˜ธํ™” ์‹œ์ผœ์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค.

์ž์„ธํ•œ ์„ค๋ช…์€ ๋’ค์— ๊ฒŒ์‹œ๋  ๊ฒƒ์ด๋ฏ€๋กœ, ๊ทธ ๊ฐ’์ด password ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค ์ •๋„๋กœ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์ฐธ๊ณ )= ์ฆ‰, ํšŒ์›๊ฐ€์ž…ํ•œ email์ด ์—†๊ฑฐ๋‚˜ password ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด false ๊ฐ’์„ ๋ฐ˜ํ™˜ํ• ๊ฒƒ์ด๊ณ , ๋‘˜๋‹ค ์ผ์น˜ํ•œ๋‹ค๋ฉด ์ฐพ์€ document user ์ •๋ณด๋ฅผ return ํ•œ๋‹ค๋Š” ํ•จ์ˆ˜์ด๋‹ค.


  1. API์—์„œ ์กด์žฌ์—ฌ๋ถ€์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ
    = ๋งŒ์•ฝ, user๊ฐ€ ์—†๋‹ค๋ฉด flash message ๋ฐ ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋กœ return ์‹œํ‚ค๊ณ (์ถ”ํ›„ html file ์ƒ์„ฑ ์˜ˆ์ •)

์กด์žฌํ•œ๋‹ค๋ฉด session์ด์šฉ (import ํ•„์š” = from flask import request, render_template, flash, redirect, url_for, session)

์ฆ‰, session ์ •๋ณด์— user_id๋ผ๋Š” key๊ฐ’์œผ๋กœ user id๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ €์žฅํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ•œ๋‹ค๋ฉด, list page๋กœ redirect ์‹œ์ผœ์ค€๋‹ค.


  1. password ์•”ํ˜ธํ™” (5๋ฒˆ ์ˆœ์„œ ์ฐธ๊ณ )
    = ๊ธฐ์กด ํšŒ์›์ •๋ณด db๋ฅผ ์ฐธ๊ณ ํ•  ์‹œ password ๊ฐ€ "1234" ๋กœ ๊ฐ€์ž…๋˜์–ด ์žˆ๋‹ค๋ฉด db์—์„œ๋„ "1234" ๋กœ ๋ณด์—ฌ์ง„๋‹ค.

๊ทธ๋Ÿฌํ•˜์—ฌ, ์•”ํ˜ธํ™” ์ž‘์—…์„ ํ†ตํ•ด ํšŒ์›๋“ค์˜ password ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ์•”ํ˜ธํ™” ์‹œ์ผœ์ฃผ๋Š” ์ž‘์—…์„ ํ•ด๋ณด๊ฒ ๋‹ค.

7-1. models > user.py file open ๋ฐ import
= generate_password_hash -> ์•”ํ˜ธํ™”๋œ password

= check_password_hash -> ์•”ํ˜ธํ™”๋œ password check


7-2. ์ €์žฅ ์‹œ ์•”ํ˜ธํ™” ์ฒ˜๋ฆฌ


7-3. password ๋น„๊ต
check_password_hash ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์•”ํ˜ธํ™”๋œ password ์™€ ์ „๋‹ฌ๋ฐ›์€ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์€ password๋ฅผ ๋„ฃ์–ด check ํ›„ ์ผ์น˜ํ•  ์‹œ true return/ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์‹œ false return

์ด๋ ‡๊ฒŒ ์•”ํ˜ธํ™” ์ž‘์—…๊นŒ์ง€ ๋งˆ์นœ ํ›„, ํšŒ์›๊ฐ€์ž… ์ง„ํ–‰ ์‹œ ์•”ํ˜ธํ™”๋œ password ๊ฐ€ db์— ์ €์žฅ๋  ๊ฒƒ์ด๋‹ค.


  1. login page API ์ƒ์„ฑ ๋ฐ html file ์ƒ์„ฑ

= page ๋‚ด๋ถ€์˜ form action ๊ฐ’๋งŒ signin์œผ๋กœ ๋ณ€๊ฒฝ


  1. ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ ํŒŒ์•… ํ›„ ํ‘œ์‹œ
    = ๋กœ๊ทธ์ธ์ด ๋˜์ง€ ์•Š์•˜์„ ๋•Œ๋Š” ๋กœ๊ทธ์ธ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚˜์•ผํ•˜๊ณ , ๋กœ๊ทธ์ธ์ด ๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋Š” ๋กœ๊ทธ์•„์›ƒ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚˜์•ผ ํ•œ๋‹ค.

if ๊ตฌ๋ฌธ ๋ฐ ์ €์žฅํ•œ session ๊ฐ’์œผ๋กœ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™๋‹ค.
์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ณด๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ๋‹ค.

= user_id ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๋กœ๊ทธ์•„์›ƒ, ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋กœ๊ทธ์ธ์ด ํ‘œ์‹œ ๋  ๊ฒƒ์ด๋‹ค.


  1. ๋กœ๊ทธ์ธ ์‹œ user_id ์ถœ๋ ฅ
    = db์— ์ €์žฅ๋œ ๊ณ ์œ  id๊ฐ’์ด ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.


  1. ๋กœ๊ทธ์•„์›ƒ ์ƒ์„ฑ
    = signin ์ด ์•„๋‹Œ, signout์ด ๋  ๊ฒƒ์ด๋‹ค.

controllers > user.py > route ์ƒ์„ฑ
= ์ €์žฅํ•ด ๋‘” ์ด์šฉ๊ถŒ ์ •๋ณด๋ฅผ ์—†์• ๋ฉด, ์ด์šฉ๊ถŒ์„ ์ฃผ๋”๋ผ๋„ ์ •๋ณด๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ž์—ฐ์ ์œผ๋กœ ๋กœ๊ทธ์•„์›ƒ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
๋กœ๊ทธ์•„์›ƒ์ด ๋œ๋‹ค๋ฉด list ๊ฐ€ ๋ณด์ด๋„๋ก redirect ์‹œ์ผœ๋‘์—ˆ๋‹ค.

์ฆ‰, ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ•œ๋‹ค๋ฉด ๋กœ๊ทธ์ธ ๋ฉ”๋‰ด๊ฐ€ ๋กœ๊ทธ์•„์›ƒ ๋ฉ”๋‰ด๋กœ ๋ณ€๊ฒฝ๋˜๊ณ , ๋กœ๊ทธ์•„์›ƒ์„ ํด๋ฆญ ์‹œ session์ด ์ดˆ๊ธฐํ™” ๋จ์— ๋”ฐ๋ผ ๋กœ๊ทธ์•„์›ƒ์ด ๋˜๊ณ , ๋กœ๊ทธ์ธ ๋ฉ”๋‰ด๊ฐ€ ๋ณด์ด๊ฒŒ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜์˜€๋‹ค๐Ÿ˜Ž

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ํšŒ์›๊ด€๋ฆฌ, ์‚ฌ์šฉ์ž ๊ถŒํ•œ๊ณผ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

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

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