Skip to content

Movie-Recommender-System/Mobee

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

153 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Movie-Recommender

ํ”„๋กœ์ ํŠธ ๋ช…์„ธ์„œ

๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

  • ํ”„๋กœ์ ํŠธ๋ช… : moBee
  • ํŒ€์› : ์ž„์œคํ˜, ๋ฐฑํ•œ๋‚˜
  • ์—…๋ฌด ๋ถ„๋‹ด ๋‚ด์—ญ
    • ์ž„์œคํ˜ : ๋ฐฑ์•ค๋“œ + ํ”„๋ก ๋“œ์—”๋“œ => ๊ธฐ๋Šฅ ๋‹ด๋‹น
    • ๋ฐฑํ•œ๋‚˜: ํ”„๋ก ํŠธ์—”๋“œ + CSS/๋””์ž์ธ => ๋””์ž์ธ ๋‹ด๋‹น

๐Ÿคน๐Ÿปโ€โ™€๏ธ ๊ธฐ์ˆ ์Šคํƒ

๐Ÿค” ํ”„๋กœ์ ํŠธ ์ปจ์…‰

์˜ํ™” ์ถ”์ฒœ, ์˜ํ™” ์ƒ์„ธ ์กฐํšŒ

๊ฟ€๋ฒŒ์ด ์ถ”์ฒœํ•ด์ฃผ๋Š” ๊ฟ€์žผ ์˜ํ™” ์ถ”์ฒœ ์‚ฌ์ดํŠธ

๐ŸŽฒ ์ฃผ์š” ๊ธฐ๋Šฅ ๋ช…์„ธ

์ธํŠธ๋กœ ํŽ˜์ด์ง€ (Intro)

  • ํ™ˆํŽ˜์ด์ง€ ์„ค๋ช… ๋ฐ ๊ฟ€๋ฒŒ(ํ…Œ๋งˆ) ์†Œ๊ฐœ

์˜ํ™” ํ™ˆํŽ˜์ด์ง€ (Movie Home)

  • ๋ชจ๋“  ์˜ํ™” ์กฐํšŒ

    • ์ตœ์‹  ์ˆœ
    • ์ถ”์ฒœ ์ˆœ(์ฐœํ•œ ์ˆœ)
  • ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•œ ์ถ”์ฒœ ์˜ํ™”

    • ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๋ฆฌ๋ทฐ ์ •๋ณด์™€ ์ฐœํ•œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž ์„ ํ˜ธ๋„ ์กฐ์‚ฌ
    • ์ฐœํ•œ ์˜ํ™”์™€ ์ด๋ฏธ ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ธด ์˜ํ™”๋Š” ์ œ์™ธํ•˜๊ณ  ์„ ํ˜ธ ์žฅ๋ฅด ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ™” ์ถ”์ฒœ(์ƒ์œ„ 10๊ฐœ)
  • ์žฅ๋ฅด๋ณ„ ์˜ํ™” ์ถ”์ฒœ

  • ์˜ํ™” ์ œ๋ชฉ์„ ๊ฒ€์ƒ‰์œผ๋กœ ๊ตฌํ˜„(๊ณต๋ฐฑ ์ œ๊ฑฐํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๋„๋ก ํ–ˆ๋‹ค.)

๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€

  • ๋…ธ๋ž€ ํ…Œ๋งˆ์— ์–ด์šธ๋ฆฌ๋Š” ๋ฏธ๋‹ˆ์–ธ์ฆˆ ์ด๋ฏธ์ง€ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„

์ปค๋ฎค๋‹ˆํ‹ฐ (Community)

  • ์˜ํ™” ๊ด€๋ จ ๊ฒŒ์‹œ๊ธ€ (CRUD, ์ข‹์•„์š” ๊ธฐ๋Šฅ)
  • ์ตœ์‹  ์ˆœ์œผ๋กœ ์ •๋ ฌ
  • ํŽ˜์ด์ง€๋„ค์ด์…˜์œผ๋กœ ์žฅ๊ณ ์—์„œ 10๊ฐœ์”ฉ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๊ตฌํ˜„
  • ๋Œ“๊ธ€ CRUD

๋งˆ์ดํŽ˜์ด์ง€

  • ์ฐœํ•œ ์˜ํ™” ๋ชฉ๋ก
  • ๋‚จ๊ธด ๋ฆฌ๋ทฐ (๋ณ„์ ) ๋ชฉ๋ก
  • ์“ด ๊ฒŒ์‹œ๋ฌผ๊ณผ ๋‚จ๊ธด ๋Œ“๊ธ€ ๋ชฉ๋ก
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•œ ์„ ํ˜ธ ์žฅ๋ฅด ์ฐจํŠธ - ์žฅ๋ฅด๋ณ„ ์„ ํ˜ธ๋„๋ฅผ ํ‘œ๊ธฐ, ์„ ํ˜ธ๋„ best ์žฅ๋ฅด 5๊ฐœ ์ถœ๋ ฅ
  • ๊ด€๋ฆฌ์ž์ธ ๊ฒฝ์šฐ ์˜ํ™” ์ƒ์„ฑ ๋ฒ„ํŠผ
    • TMDB๋กœ๋ถ€ํ„ฐ ์˜ํ™”๋ฅผ ์ž๋™์œผ๋กœ ๋ฐ›์•„์˜ค๋Š” ๋ฒ„ํŠผ ๊ตฌํ˜„(์œ ๋ช…ํ•œ ์˜ํ™”, ์ƒ์˜ ์ค‘์ธ ์˜ํ™”)
    • ์ดˆ๊ธฐ์— ์˜ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค„ ๋•Œ๋„ ์šฉ์ด(์žฅ๋ฅด๋„ ํ•จ๊ป˜ ๋„ฃ์–ด์คŒ)
    • ์ถ”๊ฐ€๋กœ ์˜ํ™” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ
    • ๋ฐ›์•„์˜ค๊ณ  ์‹ถ์€ page ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•œ๋‹ค(page 1 ๋‹น ์˜ํ™” 20 ๊ฐœ)

์˜ํ™” ์ƒ์„ธ ํŽ˜์ด์ง€ (Movie Detail)

  • TMDB ์˜ํ™” ์ •๋ณด ๋ฐ›์•„์˜ค๊ธฐ(์žฅ๋ฅด, ์ค„๊ฑฐ๋ฆฌ ๋“ฑ ์˜ํ™” ๊ด€๋ จ ์ •๋ณด)
  • ํŠธ๋ ˆ์ผ๋Ÿฌ - ์œ ํŠœ๋ธŒ ์˜์ƒ
  • ๋ฆฌ๋ทฐ CRUD + ๋ณ„์ (์ƒ์„ฑ ์ˆ˜์ • ์‹œ๊ฐ ์ •๋ณด ํฌํ•จ) โ‡’ ๋ˆ„๋ฅด๋ฉด ๋ชจ๋‹ฌ๋กœ
    • ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ์ž‘์„ฑ(๋ณธ์ธ๋งŒ ์ˆ˜์ •, ์‚ญ์ œ)
    • ํ•œ ๊ณ„์ • ๋‹น ํ•˜๋‚˜์˜ ํ‰์ ๋งŒ
  • ์ถœ์—ฐ ๋ฐฐ์šฐ, ๊ฐ๋… ์ •๋ณด => DB์—์„œ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ  ์ƒ์„ธ ์ •๋ณด ์‹œ movie id๋ฅผ ํ™œ์šฉํ•ด TMDB์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ๋ณด๊ณ  ์‹ถ์€ ์˜ํ™” ๋“ฑ๋ก ๋ฒ„ํŠผ(์ฐœ)

๐Ÿ“š ๋ชฉ์—… ์„ค๊ณ„

  • ๋ฐœ์‚ฌ๋ฏน ๋ชฉ์—… ํ™œ์šฉ

  • ์ดˆ๊ธฐ ๋ชฉ์—… ๋””์ž์ธ

    image-20220527021247763

๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ ERD ๊ด€๊ณ„๋„(DB) ์„ค๊ณ„

ERD ์ •๋ณด - ERD Diagram

image-20220527020922464


๐ŸŽจ CSS / ๋””์ž์ธ

๐Ÿ  ์ดˆ๊ธฐ ์„ค์ •

  • migrate
  • superuser ์ƒ์„ฑ
  • superuser๋กœ ๋กœ๊ทธ์ธํ•˜์—ฌ My Page์—์„œ ์˜ํ™” ์ƒ์„ฑ(๊ด€๋ฆฌ์ž์˜ ์ดˆ๊ธฐ ์˜ํ™” ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ ์ถ”๊ฐ€ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„)
  • ์˜ํ™” ๊ฐ€์ ธ์˜ค๋Š” ๊ฑด ๊ด€๋ฆฌ์ž ๊ณ„์ •๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.(์žฅ๊ณ ์—์„œ๋„ ๊ด€๋ฆฌ์ž ๊ณ„์ •๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ๊ตฌํ˜„)
  • TMDB์—์„œ ๊ฐ€์ ธ์˜ฌ Page(์˜ํ™” 20๊ฐœ)๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ํ˜„์žฌ ์ƒ์˜์ค‘์ธ ์˜ํ™”์™€ ์œ ๋ช…ํ•œ ์˜ํ™”๋“ค ์ค‘ ๊ณจ๋ผ์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ์ด๋ฏธ์ง€, ํŠธ๋ ˆ์ผ๋Ÿฌ์™€ ํ”„๋กœํ•„, ๊ฐ๋…์ด๋ฆ„ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ 100๊ฐœ ๊ฐ€์ ธ์˜ค๋ฉด 90๊ฐœ ์ •๋„ ์ €์žฅ๋œ๋‹ค!

image-20220527030611178

  • ๋ฒ„ํŠผ ๋ˆŒ๋ €์„ ๋•Œ ๋กœ๋”ฉ ์ค‘์ž„์„ ํ‘œ์‹œ!!

    image-20220527031023420

  • ๋ฐ›์•„์˜จ ์˜ํ™” ์ œ๋ชฉ์„ ์•Œ๋ฆผ์ฐฝ์œผ๋กœ ์ถœ๋ ฅ

๐Ÿ“– ํŽ˜์ด์ง€ or ์ปดํฌ๋„ŒํŠธ ๋ณ„ ๋ช…์„ธ

Nav Bar

  • Intro Page
  • Movie Home page
  • ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ, ํšŒ์›๊ฐ€์ž…
  • ์˜ํ™” ๊ฒ€์ƒ‰ ๋ฐ”
  • UP ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํŽ˜์ด์ง€ ์ตœ์ƒ๋‹จ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฒ„ํŠผ

image-20220527022922446

Intro Page

  • ์ฃผ์†Œ๋กœ ๋“ค์–ด์˜ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋ณด์ด๋Š” ํŽ˜์ด์ง€
  • ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…

image-20220527023322490

Login, SignUp Page

image-20220527032819901

image-20220527032823438

Movie Home Page

  • ์˜ํ™” ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
  • ์ƒ๋‹จ์— ํ˜„์žฌ ์˜ํ™” 3๊ฐœ์˜ ํฌ์Šคํ„ฐ๋ฅผ ๋งˆ์šฐ์Šค ๊ฐ–๋‹ค๋Œ€๋ฉด ์›€์ง์ด๊ฒŒ ๊ตฌํ˜„
  • ์žฅ๋ฅด๋ณ„, ์ตœ์‹  ์ˆœ, ์ถ”์ฒœ ์ˆœ(์ฐœํ•œ ์ˆœ), ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์˜ํ™” ์กฐํšŒ (์ฒ˜์Œ์—” ์ตœ์‹  ์ˆœ์œผ๋กœ ๋œฌ๋‹ค.)
  • ์ƒ๋‹จ nav bar์˜ ๊ฒ€์ƒ‰์œผ๋กœ๋„ ํ˜„์žฌ ์˜ํ™” ๋ฆฌ์ŠคํŠธ ์ค‘ ์กฐํšŒ ๊ฐ€๋Šฅ!
  • ์˜ํ™”๋ฅผ ์นด๋“œ๋กœ ๊ตฌํ˜„(๋ˆŒ๋ €์„ ๋•Œ ๋ฐ˜์‘ํ•˜๋„๋ก ํ™œ์šฉ)
  • ์˜ํ™”๋ฅผ ์นด๋“œ๋ฅผ ํ™•์ธํ•˜๋‹ค๋ณด๋ฉด ์Šคํฌ๋กค์ด ๋งŽ์ด ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ, nav bar์— up๋ฒ„ํŠผ์„ ๊ตฌํ˜„ํ•˜์—ฌ ๋ˆ„๋ฅด๋ฉด ์ตœ์ƒ๋‹จ์œผ๋กœ ์›€์ง์ž„.

image-20220527023513388

image-20220527023545808

Movie Detail Modal

  • ์˜ํ™” ์ƒ์„ธ ์ •๋ณด(Poster img, BackDrop img, ์ œ๋ชฉ, ๋Ÿฐํƒ€์ž„, ์žฅ๋ฅด ๋“ฑ)
  • ์˜ํ™” ์ฐœ๋ฒ„ํŠผ ๊ตฌํ˜„(๋นจ๊ฐ„ ํ•˜ํŠธ) - ๋ˆ„๋ฅด๋ฉด ์‹œ๊ฐ์ ์œผ๋กœ ๋ฐ”๋กœ ์ ์šฉ
  • ์œ ์ €๋“ค์ด ๊ณ ๋ฅธ ํ‰์ ์˜ ํ‰๊ท ๋„ ์œก๊ฐํ˜• ๋ชจ์–‘์˜ ์•„์ด์ฝ˜์œผ๋กœ ์‹œ๊ฐํ™” ํ•˜์—ฌ ๋ณด์—ฌ์ค€๋‹ค.
    • 5๊ฐœ๋Š” ๊ฟ€์žผ 4๊ฐœ๋Š” ์žฌ๋ฏธ 3๊ฐœ๋Š” ํ‰๋ฒ” 2๊ฐœ๋Š” ์ง€๋ฃจ 1๊ฐœ๋Š” ๋…ธ์žผ
  • ์œ ํŠœ๋ธŒ ํŠธ๋ ˆ์ผ๋Ÿฌ ์˜์ƒ(TMDB์—์„œ ์˜์ƒ key๋ฅผ ๋ฐ›์•„์™€ URL์„ ์—ฐ๊ฒฐ, ์ž๋™ ์žฌ์ƒ)
  • ๋ฐฐ์šฐ์™€ ๊ฐ๋…์€ TMDB API๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ›์•„์˜จ๋‹ค.(DB์—๋Š” ๋”ฐ๋กœ ์ €์žฅ X)
    • ์ƒ์„ธ์ •๋ณด ํŽ˜์ด์ง€์—์„œ๋งŒ ๊ฒ€์ƒ‰ํ•˜๋‹ˆ ๊ทธ๋•Œ๊ทธ๋•Œ ๋ฐ›์•„์˜ค๊ธฐ๋กœ ํ•œ๋‹ค.
  • ์˜ํ™”์˜ ๋ฆฌ๋ทฐ CRUD ๊ตฌํ˜„
    • ์ƒ์„ฑ, ์ˆ˜์ •์‹œ๊ฐ„ ํ‘œํ˜„, ์ž‘์„ฑ์ž ํ‘œํ˜„
    • ์ž์‹ ์ด ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ๋Š” ์ž์‹ ๋งŒ ์ˆ˜์ •
    • ์ œ๊ฑฐ๋Š” ๊ด€๋ฆฌ์ž์™€ ์ž‘์„ฑ์ž๋งŒ ๊ฐ€๋Šฅ
    • ์ž‘์„ฑ์€ ๋กœ๊ทธ์ธํ•œ ์œ ์ €๋งŒ ๊ฐ€๋Šฅ
    • ์กฐํšŒ๋Š” ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์•„๋„ ๊ฐ€๋Šฅ

image-20220527025648788

image-20220527025714846

image-20220527025727614

Community

  • ์˜ํ™”์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ
  • ๊ฒŒ์‹œ๊ธ€, ๋Œ“๊ธ€ CRUD
    • ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์•„๋„ ์กฐํšŒ ๊ฐ€๋Šฅ
    • ๋กœ๊ทธ์ธํ•ด์•ผ ์ƒ์„ฑ ๊ฐ€๋Šฅ
    • ์ž‘์„ฑ์ž์™€ ๊ด€๋ฆฌ์ž๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅ
    • ์ž‘์„ฑ์ž๋งŒ ์ˆ˜์ • ๊ฐ€๋Šฅ
  • ๊ฒŒ์‹œ๊ธ€๊ณผ ๋Œ“๊ธ€ ๋‘˜ ๋‹ค ์ž‘์„ฑ์‹œ๊ฐ„ ์ˆ˜์ •์‹œ๊ฐ„ ํฌํ•จ
  • ๊ฒŒ์‹œ๊ธ€ ์ข‹์•„์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•˜์—ฌ ์žฅ๊ณ ์—์„œ 10๊ฐœ์”ฉ ํŽ˜์ด์ง€ ๋ณ„๋กœ ๋ฐ›์•„์˜จ๋‹ค.
  • ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ๋Š” ๋ชจ๋‹ฌ๋กœ ๊ตฌํ˜„

image-20220527030321471

image-20220527030341794

My Page

  • ์ฐœ๊ณผ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ๋ถ„์„ํ•œ ์žฅ๋ฅด ์„ ํ˜ธ๋„ ๊ทธ๋ž˜ํ”„๋กœ ์‹œ๊ฐํ™”
  • ์ข‹์•„ํ•˜๋Š” ์žฅ๋ฅด top5
  • ์ฐœํ•œ ์˜ํ™”(๋‚ด ๊ฟ€๋‹จ์ง€ ์˜ํ™”)
  • ๋‚จ๊ธด ๋ฆฌ๋ทฐ, ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€, ์ž‘์„ฑํ•œ ๋Œ“๊ธ€ ๋ชจ์Œ
  • ๊ด€๋ฆฌ์ž์ธ ๊ฒฝ์šฐ๋Š” ์˜ํ™” ์ƒ์„ฑ ํผ ์กด์žฌ

image-20220527031235956

404 page

image-20220527033621586


๐Ÿ‘ฎโ€โ™€๏ธ ๊ถŒํ•œ ๋ถ€์—ฌ

Decorator ์‚ฌ์šฉ

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated, IsAdminUser, IsAuthenticatedOrReadOnly

# ๊ถŒํ•œ ๋ถ€์—ฌ๋Š” api_view ์•„๋ž˜ ์ ์–ด์•ผ ํ•œ๋‹ค!!
@api_view(['POST'])
@permission_classes([IsAdminUser])      # ๊ด€๋ฆฌ์ž๋งŒ ๊ฐ€๋Šฅ!!
def movie_create(request, kind, pages):
    pass
  • @permission_classes([IsAuthenticatedOrReadOnly]) : ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์€ ์œ ์ €๋Š” ์ฝ๊ธฐ๋งŒ
  • @permission_classes([IsAuthenticated]) : ๋กœ๊ทธ์ธํ•œ ์œ ์ €๋งŒ
  • @permission_classes([IsAdminUser]) : ๊ด€๋ฆฌ์ž๋งŒ

Serailizerํ™” ์‹œํ‚ค๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋“ค

  • serializer๋กœ ๋ฐ์ดํ„ฐ๋ฅผ jsonํ™” ํ•œ ํ›„ data๋ฅผ ์ง์ ‘ add ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • SerializerMethodField ์‚ฌ์šฉ! ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ „์†กํ•  ๋ฐ์ดํ„ฐ์— ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด return ๊ฐ’์„ ์ถ”๊ฐ€ ํ•„๋“œ ๊ฐ’์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.
    • ํ•จ์ˆ˜์˜ ์ธ์ž ์ค‘ self๋Š” ํ˜„์žฌ serializer์ด๋ฉฐ, views.py์—์„œ ์ž…๋ ฅ์œผ๋กœ ๋„ฃ์–ด์ฃผ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ•‘ ์‹œ๊ฐ„ ์„ค์ •

  • ๊ฒŒ์‹œ๊ธ€์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ํ•จ์ˆ˜
  • ๋ช‡ ๋ถ„ ์ „, ๋ช‡ ์‹œ๊ฐ„ ์ „ ๋“ฑ์œผ๋กœ ์„ค์ •
  • serializer์—์„œ ์ž‘์„ฑ
from django.utils import timezone
from datetime import datetime, timedelta 


class ReviewSerializer(serializers.ModelSerializer):
    created_at = serializers.SerializerMethodField('create_time')
    updated_at = serializers.SerializerMethodField('update_time')
    
    '''
    
    ...
    
    '''
    
    def create_time (self, my):
        time = datetime.now(tz=timezone.utc) - my.created_at
        if time < timedelta(minutes=1):
            return '๋ฐฉ๊ธˆ ์ „'
        elif time < timedelta(hours=1):
            return str(int(time.seconds / 60)) + '๋ถ„ ์ „'
        elif time < timedelta(days=1):
            return str(int(time.seconds / 3600)) + '์‹œ๊ฐ„ ์ „'
        elif time < timedelta(days=7):
            time = datetime.now(tz=timezone.utc).date() - my.created_at.date()
            return str(time.days) + '์ผ ์ „'
        else:
            return False
        
    def update_time (self, my):
        time = datetime.now(tz=timezone.utc) - my.updated_at
        if time < timedelta(minutes=1):
            return '๋ฐฉ๊ธˆ ์ „'
        elif time < timedelta(hours=1):
            return str(int(time.seconds / 60)) + '๋ถ„ ์ „'
        elif time < timedelta(days=1):
            return str(int(time.seconds / 3600)) + '์‹œ๊ฐ„ ์ „'
        elif time < timedelta(days=7):
            time = datetime.now(tz=timezone.utc).date() - my.updated_at.date()
            return str(time.days) + '์ผ ์ „'
        else:
            return False   
    ...

๐Ÿ” ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • includes๋กœ ๊ตฌํ˜„ ์ˆœํšŒํ•˜๋ฉฐ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  v-if๋กœ ์žˆ๋Š” ๊ฒƒ๋งŒ ๋ Œ๋”๋งํ•œ๋‹ค.

  • ํ•œ๊ธ€์€ v-model ๋Œ€์‹ ์— @input์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค.

  • ๋„์–ด์“ฐ๊ธฐ ์ƒ๊ด€ ์—†์ด ๋œจ๊ฒŒ

    • replace(/ /gi, '').includes(query)

    • input์—๋„ replace(/ /gi, '')๋กœ query๋ฅผ ์ œ๊ฑฐํ•ด์ค€๋‹ค.

๐Ÿ“’ ํŽ˜์ด์ง€๋„ค์ด์…˜

  • django
    • view์—์„œ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
from django.core.paginator import Paginator

...
	    paginator = Paginator(articles, 10)
        page_num = request.GET.get('page')
        page_obj = paginator.get_page(page_num)
        serializer = ArticleListSerializer(page_obj, many=True)
        data = {}
        data['count'] = articles.count()
        data['articles'] = serializer.data
        return Response(data)
  • vue

    • ๊ฒฝ๋กœ๋ฅผ articles: page => HOST + ARTICLES + ?page=${page}๋กœ ?๋กœ ํŽ˜์ด์ง€๋ฅผ ์ „์†ก

    • ํŽ˜์ด์ง€ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋ฐ›์•„์„œ ๋„˜๊ธด๋‹ค.


๐Ÿ˜ข ์–ด๋ ค์› ๋˜ ์  and ๋А๋‚€ ์ 

  • ๋ชจ๋ธ์ด ๋ณต์žกํ•ด์ง€๋‹ˆ, serializer๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ค„ ์•Œ์•„์•ผ ํ–ˆ๋‹ค.

    • ์žฅ๊ณ  serializer ๋‹ค๋ฃจ๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋“ค์ด ์กด์žฌ
  • ์ฝ”๋“œํŽœ์„ ํ™œ์šฉํ•  ๋•Œ Vue์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ๋ฒ•๋“ค์ด ๋‹ค์ˆ˜ ์กด์žฌ(์‚ฌ์šฉ์ž๋“ค์ด ๋‚จ๊ธด ์ฝ”๋“œ๋ผ ๋ถ€์ •ํ™•ํ•œ ์ •๋ณด๋“ค๋„ ํฌํ•จ)

    • ์‹œ๊ฐ„์„ ๋งŽ์ด ์Ÿ์•˜๋‹ค. ํ•˜๋ฃจ์— 13์‹œ๊ฐ„ ์”ฉ ์ž ๋„ ๋ชป์ž๋ฉด์„œ ํ–ˆ๋‹ค.๐Ÿ˜…๐Ÿ˜…
  • Vue Modal์—์„œ ์ด๋ฒคํŠธ ์ ์šฉ ๊ด€๋ จ ์–ด๋ ค์›€์„ ๊ฒช์Œ.

  • Bootstrap Modal์ด ์•„๋‹Œ ๋‹ค๋ฅธ Modal ์‚ฌ์šฉ

  • ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋งŽ์•„ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ƒ๊ฐํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์› ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์‹œ๊ฐ„๋„ ์žˆ์–ด ๋ Œ๋”๋งํ•˜์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜๋„ ๋ฐœ์ƒํ–ˆ๋‹ค. ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ›…์ด ์‹คํ–‰๋  ๋•Œ ์ž„์˜๋กœ ์‹œ๊ฐ„์ด ํ๋ฅธ ๋’ค ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors