Skip to content

maxkim77/DjangoBlogProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

212 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Django MiniProject1 - Django Technical Blog

promo

๐ŸŽˆ1. ๋ชฉํ‘œ์™€ ๊ธฐ๋Šฅ

1.1 ๋ชฉํ‘œ ๋ฐ ๋ฐฐ๊ฒฝ

  • ๋ชฉํ‘œ :

โœ”๏ธŽ Django๋ฅผ ์ด์šฉํ•œ AI Image ๊ฐค๋Ÿฌ๋ฆฌํ˜• ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœ

โœ”๏ธŽ ์œ ์ €๋“ค์ด Stable Diffusion API๋ฅผ ํ†ตํ•ด AI Image ์ƒ์„ฑํ›„ ์—…๋กœ๋“œ ๋ฐ ๊ณต์œ ํ•˜๋ฉฐ AI Image์™€ ๊ด€๋ จ ์ •๋ณด ๊ณต์œ 

  • ๋ฐฐ๊ฒฝ:

โœ”๏ธŽ Stable Diffusion, Dalle ๋“ฑ AI Image์˜ ๊ธฐ์ˆ ์˜ ๋ฐœ๋‹ฌ

โœ”๏ธŽ AI ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๊ด€์‹ฌ๊ณผ AI์ด๋ฏธ์ง€์šฉ ๋ธ”๋กœ๊ทธ ์ฃผ์ œ๊ฐ€ ๋งŽ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด ํ•ด๋‹น ์ฃผ์ œ๋กœ ๋ธ”๋กœ๊ทธ ๊ฐœ๋ฐœ

1.2 ๊ธฐ๋Šฅ

  • CRUD, ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…, ๋Œ“๊ธ€, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ, ์กฐํšŒ์ˆ˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…
  • ๋Œ“๊ธ€ ๊ธฐ๋Šฅ
  • ํƒœ๊ทธ ๋ฐ ์นดํ…Œ๊ณ ๋ฆฌ ๋ถ„๋ฅ˜

๐ŸŽ‰2. ์š”๊ตฌ์‚ฌํ•ญ

2.1 ๊ธฐ๋ณธ ์š”๊ตฌ์‚ฌํ•ญ

  • UI ์Šคํƒ€์ผ๋ง
  • ํด๋ž˜์Šคํ˜• ๋ทฐ ๋ฐ ํ•จ์ˆ˜ํ˜• ๋ทฐ ์ค‘ ํƒ ๊ฐœ๋ฐœ
  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ตฌ์กฐ ์„ค๊ณ„
  • ๋ชจ๋†€๋กœ๊ทธ์‹ ์žฅ๊ณ 

2.2 ๋‹จ๊ณ„๋ณ„ ์š”๊ตฌ์‚ฌํ•ญ

  • 0๋‹จ๊ณ„: Django Admin์„ ์ด์šฉํ•œ ๊ฒŒ์‹œ๊ธ€ ์ฝ๊ธฐ ๋ฐ ๋ฉ”์ธํŽ˜์ด์ง€ ๊ตฌํ˜„ํ•˜๊ธฐ
  • 1๋‹จ๊ณ„: ๋ธ”๋กœ๊ทธ CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
  • 2๋‹จ๊ณ„: ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ๋ธ”๋กœ๊ทธ ๊ตฌํ˜„ํ•˜๊ธฐ
  • 3๋‹จ๊ณ„: ๋ธ”๋กœ๊ทธ ๊ธฐ๋Šฅ ์™ธ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์ž‘์„ฑ ๋ฐ ๋ฐฐํฌ

2.3 ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ ๋ฐ ์•„์ด๋””์–ด ๊ธฐํš

์บก์ฒ˜

  • 4๊ฐœ์˜ ์•ฑ(main, accounts, blog(๋ฉ”์ธ ๊ฐค๋Ÿฌ๋ฆฌํ˜• ๊ฒŒ์‹œํŒ), boardapp(๋ณด์กฐํ˜• ์ž์œ ๊ฒŒ์‹œํŒ))์œผ๋กœ ๊ตฌ์„ฑ

  • ํด๋ž˜์Šค๋ทฐ ๋ฐ ํ•จ์ˆ˜ํ˜•๋ทฐ

    • ํด๋ž˜์Šค ๋ทฐ๋Š” ์ œ๋„ˆ๋ฆญ๋ทฐ, ๋ฏน์Šค์ธ๋ทฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” 'ํ™•์žฅ์„ฑ'๊ณผ '์žฌ์‚ฌ์šฉ์„ฑ'์ด๋ผ๋Š” ์žฅ์ ์œผ๋กœ ์ฃผ์š” ์•ฑ(main, accounts,blog) ๋Š” ํด๋ž˜์Šคํ˜•์œผ๋กœ ์ž‘์„ฑ
    • ํ•จ์ˆ˜ํ˜• ๋ทฐ๋Š” '๊ฐ„๊ฒฐ'ํ•˜๊ณ  '์ง๊ด€'์ ์ธ ํŠน์ง•์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์“ฐ์ผ ์ˆ˜์žˆ๋Š” ๋ณด์กฐํ˜• ์ž์œ ๊ฒŒ์‹œํŒ์—์„œ ์ž‘์„ฑ
  • ํฌ์ŠคํŠธ ๊ธฐ๋Šฅ์œผ๋กœ ์ข‹์•„์š”, ํƒœ๊ทธ, ๋Œ€๋Œ“๊ธ€, ์นดํ…Œ๊ณ ๋ฆฌ ๋“ฑ์„ ์‚ฌ์šฉ ํ•จ

    • ๋Œ“๊ธ€์€ ๋ฉ”์ธ ๊ฐค๋Ÿฌ๋ฆฌํ˜• ๋ธ”๋กœ๊ทธ๋Š” ๋Œ€๋Œ“๊ธ€ํ˜•
    • ๋ณด์กฐ ์ž์œ  ๊ฒŒ์‹œํŒ์€ ์ผ๋ฐ˜ ๋Œ“๊ธ€ํ˜• ๊ตฌํ˜„

โœจ3. ๊ฐœ๋ฐœ๊ธฐ์ˆ  & ํ™˜๊ฒฝ ๋ฐ ๋ฐฐํฌ URL

3.1 ๊ฐœ๋ฐœ ๊ธฐ์ˆ  ๋ฐ ํ™˜๊ฒฝ

[FE]:

HTML5 CSS3 JavaScript Bootstrap

[BE]:

Python Django PostgreSQL

[API]:

Stable Diffusion tawk.to

[ENV]:

VSCode AWS

  • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ Startbootstrap์—์„œ ํ…Œ๋งˆ๋ฅผ ๋”ฐ์˜ด
  • ํŠน์ด์‚ฌํ•ญ์œผ๋กœ๋Š” tawk.to๋ผ๋Š” ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์†”๋ฃจ์…˜๊ณผ StableDiffusion API๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ(๋ฐฐํฌ ๋ฒ„์ ผ์—์„œ๋Š” ํ˜„์žฌ๋Š” ํ† ํฐ์ˆ˜ ์†Œ์ง„์œผ๋กœ ์ƒ์„ฑ์ด ์•ˆ๋˜๋Š” ์ƒํ™ฉ)
  • Github์— ์—…๋กœ๋“œํ•œ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ AWS lightsail์— clone ํ•˜์—ฌ ๋ฐฐํฌ

3.2 ๋ฐฐํฌ URL: http://54.180.146.126:8000/

๐ŸŽ4. ํ”„๋กœ์ ํŠธ ๋ฐ URL ๊ตฌ์กฐ์™€ ๊ฐœ๋ฐœ์ผ์ •

4.1 ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

  • ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด accounts, blog, boardapp, main 4๊ฐœ๋กœ ๊ตฌ์„ฑ๋จ
๐Ÿ“ฆmysite
 โ”ฃ ๐Ÿ“‚accounts
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚blog
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚boardapp
 โ”ƒ โ”ฃ ๐Ÿ“œmodels.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚main
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”ƒ โ”ฃ ๐Ÿ“œviews.py
 โ”ฃ ๐Ÿ“‚templates
 โ”ƒ โ”ฃ ๐Ÿ“‚accounts
 โ”ƒ โ”ฃ ๐Ÿ“‚blog
 โ”ƒ โ”ฃ ๐Ÿ“‚boardapp
 โ”ƒ โ”ฃ ๐Ÿ“‚main
 โ”ฃ ๐Ÿ“‚static
 โ”ƒ โ”ฃ ๐Ÿ“‚css
 โ”ƒ โ”ฃ ๐Ÿ“‚js
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œscripts.js
 โ”ฃ ๐Ÿ“‚media
 โ”ƒ โ”ฃ ๐Ÿ“‚blog
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚images
 โ”ฃ ๐Ÿ“‚tutorialdjango
 โ”ƒ โ”ฃ ๐Ÿ“œsettings.py
 โ”ƒ โ”ฃ ๐Ÿ“œurls.py
 โ”— ๐Ÿ“œmanage.py

4.2 URL ๊ตฌ์กฐ

  • main
App URL Views Function HTML File Name Note
main '/' home main/home.html ํ™ˆํ™”๋ฉด
main '/about/' about main/about.html ์†Œ๊ฐœํ™”๋ฉด
main '/generator/' generator main/generator.html AI์ด๋ฏธ์ง€ ์ƒ์„ฑ๊ฒŒ์‹œํŒ
  • accounts
App URL Views Function HTML File Name Note
accounts 'register/' register accounts/register.html ํšŒ์›๊ฐ€์ž…
accounts 'login/' login accounts/login.html ๋กœ๊ทธ์ธ
accounts 'logout/' logout accounts/logout.html ๋กœ๊ทธ์•„์›ƒ
accounts 'profile/' profile accounts/profile.html ๋น„๋ฐ€๋ฒˆํ˜ธ๋ณ€๊ฒฝ๊ธฐ๋Šฅ /
ํ”„๋กœํ•„ ์ˆ˜์ •/ ๋‹‰๋„ค์ž„์ถ”๊ฐ€
  • boardapp
App URL Views Function HTML File Name Note
boardapp 'board/' board boardapp/post_list.html ๊ฒŒ์‹œํŒ ๋ชฉ๋ก
boardapp 'board/int:pk/' post_detail boardapp/post_detail.html ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ๋ณด๊ธฐ
boardapp 'board/write/' post_write boardapp/post_write.html ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ
boardapp 'board/edit/int:pk/' post_edit boardapp/post_edit.html ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •
boardapp 'board/delete/int:pk/' post_delete boardapp/post_delete.html ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ
boardapp 'board/int:pk/comment/' comment_create boardapp/comment_form.html ๋Œ“๊ธ€ ์ž‘์„ฑ
boardapp 'board/int:pk/comment/
int:comment_pk/edit/'
comment_edit boardapp/comment_form.html ๋Œ“๊ธ€ ์ˆ˜์ •
boardapp 'board/int:pk/comment/
int:comment_pk/delete/'
comment_delete boardapp/comment_
confirm_delete.html
๋Œ“๊ธ€ ์‚ญ์ œ
  • blog
App URL Views Function HTML File Name Note
blog 'blog/' blog blog/blog.html ๊ฐค๋Ÿฌ๋ฆฌํ˜• ๊ฒŒ์‹œํŒ ๋ฉ”์ธ ํ™”๋ฉด
blog 'blog/int:pk/' post blog/post.html ์ƒ์„ธ ํฌ์ŠคํŠธ ํ™”๋ฉด
blog 'blog/write/' write blog/write.html ์นดํ…Œ๊ณ ๋ฆฌ ์ง€์ •, ์‚ฌ์ง„์—…๋กœ๋“œ,
๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ์ˆ˜ ๋ฐ˜์˜
blog 'blog/edit/int:pk/' edit blog/edit.html ๊ฒŒ์‹œ๋ฌผ๋ชฉ๋ก๋ณด๊ธฐ
blog 'blog/delete/int:pk/' delete blog/delete.html ์‚ญ์ œ ํ™”๋ฉด
blog 'blog/search/' search blog/search.html ์ฃผ์ œ์™€ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋”ฐ๋ผ ๊ฒ€์ƒ‰,
์‹œ๊ฐ„์ˆœ์— ๋”ฐ๋ผ ์ •๋ ฌ
blog 'post/int:post_pk/comment/' comment_new blog/comment_form.html ๋Œ“๊ธ€ ์ž…๋ ฅ ํผ
blog 'post/int:post_pk/comment/
int:parent_pk/'
reply_new blog/comment_form.html ๋Œ€๋Œ“๊ธ€ ํผ
blog 'post/int:pk/like/' like_post blog/post.html ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅด๋ฉด blog/post๋กœ Redirect๋จ
blog 'comment/int:pk/update/' comment_update blog/comment_form.html ๋Œ“๊ธ€ ์—…๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ
blog 'comment/int:pk/delete/' comment_delete blog/comment_
confirm_delete.html
๋Œ“๊ธ€ ์‚ญ์ œ ํผ

4.3 ๊ฐœ๋ฐœ์ผ์ •

์Šฌ๋ผ์ด๋“œ2

๐ŸŽ‰5. UI ๊ธฐํš ๋ฐ ๊ตฌ์„ฑ

์Šฌ๋ผ์ด๋“œ1

5.1 main ๊ตฌ์„ฑ :

  • ๋ฉ”์ธ ํŽ˜์ด์ง€
  • ์„ค๋ช… ํŽ˜์ด์ง€
  • ์ด๋ฏธ์ง€์ƒ์„ฑ ํŽ˜์ด์ง€

5.2 boardapp ๊ตฌ์„ฑ:

  • ๊ฒŒ์‹œํŒํ˜• ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€

5.3 blog ๊ตฌ์„ฑ:

  • ๊ฐค๋Ÿฌ๋ฆฌํ˜• ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€

5.4 accounts ๊ตฌ์„ฑ:

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

๐ŸŽจ6. ERD ๋ชจ๋ธ๋ง

๊ฐ๊ทค๋งˆ์ผ“

6.1 ํ…Œ์ด๋ธ” ๊ตฌ์กฐ :

  • users, Post, Comment, Tag, PostLikes, PostTags, UserProfile, Board, BoardComment, Boardlikes(์ด 10๊ฐœ์˜ ํ…Œ์ด๋ธ”)

6.2 ๊ด€๊ณ„ ์ •์˜ :

  • Post์™€ Board์˜ id ํ•„๋“œ๋Š” users ํ…Œ์ด๋ธ”์˜ id ํ•„๋“œ์™€ ์—ฐ๊ฒฐ
  • ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„ : PostLikes โ†” (Post ์™€ User) / PostTags โ†” (Post ์™€ Tag)
  • ๋‹ค๋Œ€์ผ ๊ด€๊ณ„ : BoardComment - Board / Boardlikes - User

๐ŸŽฒ7. ๋ฉ”์ธ๊ธฐ๋Šฅ

๐Ÿ“Œ ๋ฉ”์ธํŽ˜์ด์ง€ ๊ตฌํ˜„

1 (2)

  • ํŽ˜์ด์ง€ ์ œ๋ชฉ๊ณผ ๋ธ”๋กœ๊ทธ ์ž…์žฅํ•˜๊ธฐ ๋ฒ„ํŠผ
  • ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ๋ฒ„ํŠผ
  • ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€๋กœ ์ด๋™
  • ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

๐Ÿ“Œ ํšŒ์›๊ฐ€์ž… / ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„

3 (1)

  • ํšŒ์›๊ฐ€์ž…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€
  • ์ž…๋ ฅ๋ฐ›๋Š” ๊ฐ’์€ id, password
  • ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€
  • ์ž…๋ ฅ๋ฐ›๋Š” ๊ฐ’์€ id, password

๐Ÿ“Œ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„

4 (2)

  • ๋กœ๊ทธ์ธ์„ ํ•œ ์œ ์ €๋งŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ฒŒ์‹œ๊ธ€ ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ์žˆ์Œ
  • ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€์ด ์ €์žฅ๋˜์–ด ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์— ๋ณด์—ฌ์•ผ ํ•จ
  • ์‚ฌ์ง„ ์—…๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•จ
  • ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ์ˆ˜๊ฐ€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•จ

๐Ÿ“Œ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ๊ธฐ๋Šฅ ๊ตฌํ˜„

2 1

  • ๋ชจ๋“  ์‚ฌ์šฉ์ž๋“ค์ด ๊ฒŒ์‹œํ•œ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€๋“ค์˜ ์ œ๋ชฉ์„ ํ™•์ธ ํ•จ

๐Ÿ“Œ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ๋ณด๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ 5 3

  • ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ/๋‚ด์šฉ์„ ๋ณด๋Š” ๊ธฐ๋Šฅ

๐Ÿ“Œ ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ 6

  • ์ฃผ์ œ์™€ ํƒœ๊ทธ์— ๋”ฐ๋ผ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅ
  • ๊ฒ€์ƒ‰ํ•œ ๊ฒŒ์‹œ๋ฌผ์€ ์ตœ์‹ ์ˆœ์— ๋”ฐ๋ผ ์ •๋ ฌ

๐Ÿ“Œ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„

8

  • ๋กœ๊ทธ์ธ์„ ํ•œ ์œ ์ €๋งŒ ํ•ด๋‹น ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ณธ์ธ์˜ ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹ˆ๋ผ๋ฉด ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅ
  • ๊ฒŒ์‹œ๊ธ€์˜ ์ œ๋ชฉ ๋˜๋Š” ๋‚ด์šฉ์„ ์ˆ˜์ • ํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์ˆ˜์ •๋œ ๋‚ด์šฉ์€ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก๋ณด๊ธฐ/์ƒ์„ธ๋ณด๊ธฐ์— ๋ฐ˜์˜

๐Ÿ“Œ ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„

9

  • ๋กœ๊ทธ์ธ์„ ํ•œ ์œ ์ €๋งŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ณธ์ธ์˜ ๊ฒŒ์‹œ๊ธ€์ด ์•„๋‹ˆ๋ผ๋ฉด ์ˆ˜์ •์ด ๋ถˆ๊ฐ€
  • ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์‚ญ์ œ๋ฅผ ์™„๋ฃŒํ•œ ์ดํ›„์— ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ
  • ์‚ญ์ œ๋œ ๊ฒŒ์‹œ๊ธ€์€ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก๋ณด๊ธฐ/์ƒ์„ธ๋ณด๊ธฐ์—์„œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€

๐Ÿ””8. ์ถ”๊ฐ€๊ธฐ๋Šฅ

๐Ÿ“ ํšŒ์› ๊ด€๋ จ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ(UI ์ง์ ‘ ๊ตฌํ˜„ ํ•„์š”)

13

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ๊ธฐ๋Šฅ
  • ํ”„๋กœํ•„ ์ˆ˜์ •
  • ๋‹‰๋„ค์ž„(Username) ์ถ”๊ฐ€

๐Ÿ“ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ(UI ์ง์ ‘ ๊ตฌํ˜„ ํ•„์š”)

11 (3)

  • ๋Œ“๊ธ€ ์ถ”๊ฐ€
  • ๋Œ“๊ธ€ ํŽธ์ง‘/์‚ญ์ œ
  • ๋Œ€๋Œ“๊ธ€

๐Ÿ“ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ

  • ์ •์  ํŒŒ์ผ ๋ชจ์œผ๊ธฐ (collectstatic)
# settings.py

# ์ •์  ํŒŒ์ผ ๊ธฐ๋ณธ URL
STATIC_URL = '/static/'

# ์ถ”๊ฐ€์ ์ธ ์ •์  ํŒŒ์ผ ๋””๋ ‰ํ† ๋ฆฌ (๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ)
STATICFILES_DIRS = [
    BASE_DIR / 'static',
]
#(์šด์˜ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

์„œ๋ฒ„์—์„œ python manage.py collectstatic ๋ช…๋ น ์ž…๋ ฅ

  • ๊ณต์ง€์‚ฌํ•ญ ๊ธฐ๋Šฅ
    • ๊ด€๋ฆฌ์ž๋งŒ ๊ด€๋ฆฌ์žํŽ˜์ด์ง€์—์„œ ์„ค์ • ๊ฐ€๋Šฅ
    • ๋ชจ๋ธ์—์„œ is_notice ์„ค์ •
    • views.py์—์„œ get_context_data ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต์ง€์‚ฌํ•ญ๊ณผ ์ผ๋ฐ˜ ๊ฒŒ์‹œ๊ธ€์„ ๋ถ„๋ฆฌ

00

image

# models.py
class Post(models.Model):
# <์ƒ๋žต>
    is_notice = models.BooleanField(default=False, verbose_name="๊ณต์ง€์‚ฌํ•ญ ์—ฌ๋ถ€")
# views.py
class BlogListView(ListView):
# <์ƒ๋žต>
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        notice_list = Post.objects.filter(is_notice=True).order_by('-created_at')
        regular_post_list = Post.objects.filter(is_notice=False).order_by('-created_at')
# <์ƒ๋žต> 
  • Tawk API๋ฅผ ํ™œ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…๊ธฐ๋Šฅ(About ํŽ˜์ด์ง€)

2 (2)

๐ŸŽˆ Link : https://www.tawk.to/

  • Stable Diffusion์„ ํ™œ์šฉํ•œ AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ํ™”๋ฉด(Generator ํŽ˜์ด์ง€)

12 (3)

๐ŸŽˆ Link : https://stablediffusionapi.com/docs/stable-diffusion-api/text2img

๐Ÿ“ (์„ ํƒ) AWS Lightsail๋กœ ๋ฐฐํฌ

image

๐ŸŽˆ Link : https://aws.amazon.com/ko/lightsail/

Video.2.mp4

๐Ÿงต9. RDBMS ์‚ฌ์šฉ : PostgreSQL - Django ์—ฐ๊ฒฐ

  • RDBMS Postgre๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Django์™€ ์—ฐ๊ฒฐํ›„ post ์ฟผ๋ฆฌ ์กฐํšŒ
# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'tutorialdjango',
        'USER': 'postgres',
        'PASSWORD': '1234',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}
แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-11-19 แ„‹แ…ฉแ„’แ…ฎ 3 41 35 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-11-19 แ„‹แ…ฉแ„’แ…ฎ 3 37 58

๐Ÿ“– 10. ์ด ์ •๋ฆฌ

10.1 ์˜ค๋ฅ˜์ •๋ฆฌ

๐Ÿ› IntegrityError

  • ์—๋Ÿฌ๋ช…: 'IntegrityError'
  • ๋ฌธ์ œ์ƒํ™ฉ: ๋ชจ๋ธ ํ•„๋“œ๊ฐ€ null ๊ฐ’์„ ํ—ˆ์šฉ ์•ˆํ•จ
  • ํ•ด๊ฒฐ๋ฐฉ์•ˆ: ํ•ด๋‹น ํ•„๋“œ์— 'null=True' ์˜ต์…˜ ์ถ”๊ฐ€
# models.py
summary = models.TextField(null=True)

10.2 ์•Œ๊ฒŒ๋œ ์ 

๐Ÿ’ก ํด๋ž˜์Šคํ˜• ๋ทฐ ๋ชฉ๋ก

  • ์ œ๋„ˆ๋ฆญ๋ทฐ

    • ListView: ๊ฒŒ์‹œ๋ชฉ๋ก์„ ๋ณด์—ฌ ์คŒ
    • DetailView: ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ธ ์ •๋ณด ๋ณด์—ฌ ์คŒ
    • CreateView: ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    • UpdateView: ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •
    • DeleteView: ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉ
    • TemplateView: ์ •์  ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง
  • ๋ฏน์Šค์ธ(Mixins)

    • LoginRequiredMixin: ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ํ•ด์•ผ๋งŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ทฐ
    • UserPssesTextMixin: ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ํ…์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ด์•ผ๋งŒ ๋ทฐ์— ์ ‘๊ทผ

๐Ÿ’ก django-widget-tweaks

  • Django์˜ ํผ ํ•„๋“œ์˜ HTML์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ CSS ํด๋ž˜์Šค ์ถ”๊ฐ€, ์†์„ฑ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
{% load widget_tweaks %}
<form method="post">
    {% csrf_token %}
</form>
{% render_field form.field_name class="form-control" %} # ํ•„๋“œ ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ Œ๋”๋งํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ
{{ field|add_class:"form-control" }} # | ๊ธฐํ˜ธ๋Š” ํ•„ํ„ฐ๋ฅผ ์˜๋ฏธ ์ด ํ•„ํ„ฐ๋Š” ์ง€์ •๋œ ํ•„๋“œ์— ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€

๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์œผ๋กœ ํด๋ž˜์Šค์— ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋””์ž์ธ ํ•˜์˜€์Œ

๐Ÿ’ก ๋Œ€๋Œ“๊ธ€ ๊ตฌํ˜„ ๋ฐฉ์‹

  • Comment ๋ชจ๋ธ์˜ parent ํ•„๋“œ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„
  • ์‚ฌ์šฉ์ž๊ฐ€ B๋ผ๋Š” ๋Œ“๊ธ€์„ ๋‹ฌ ๋•Œ A์˜ ๋Œ€๋Œ“๊ธ€๋กœ ์ง€์ •ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, A๋ผ๋Š” ๋Œ€๋Œ“๊ธ€ ID๋Š” parent_pk ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ
  • CommentCreateView ์—์„œ ์ด๋ฅผ ํ™•์ธํ•˜์—ฌ B ๋Œ“๊ธ€์˜ ๋ถ€๋ชจ๋Œ“๊ธ€ 'parent' ๋Œ“๊ธ€๋กœ A๋ฅผ ์„ค์ •
  • ์ด๋ ‡๋“ฏ parent ํ•„๋“œ๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ-์ž์‹๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ํ˜•์„ฑ๋จ
  • ํ…œํ”Œ๋ฆฟ์—์„œ๋Š” ์ฃผ๋Œ“๊ธ€์— ๋Œ€ํ•œ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ replies ๊ด€๊ณ„ ํ˜•์„ฑ
{% for reply in comment.replies.all %}
{% endfor %}

10.3 ๋А๋‚€์ 

  • Django์˜ ํŽธ๋ฆฌํ•จ๊ณผ Python์˜ ๊ฐ•๋ ฅํ•จ์„ ๋А๋‚„ ์ˆ˜ ์žˆ์—ˆ๋˜ ์œ ์ตํ•œ ํ”„๋กœ์ ํŠธ์˜€์Œ
  • ์Šคํ”„๋ง๋ถ€ํŠธ ์ž๋ฐ” ๊ฐ•์˜๋ฅผ ์กฐ๊ธˆ์”ฉ ๋“ฃ๊ณ  ์žˆ๋Š”๋ฐ ๋งŽ์€ ๊ฒฝํ—˜์ด ์žˆ๋Š”๊ฑด ์•„๋‹ˆ์ง€๋งŒ ๋”ฐ๋ฅธ ํ”„๋ ˆ์ž„ ์›Œํฌ์— ๋น„ํ•ด ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ์„ ๋А๋‚Œ
  • ํ•จ์ˆ˜ํ˜•๊ณผ ํด๋ž˜์Šคํ˜• ๋ทฐ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์•ฑ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋‹ค ๋ณด๋‹ˆ URL์ด ๋ณต์žกํ•ด์กŒ์ง€๋งŒ, ๋‘˜์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์•Œ ์ˆ˜ ์žˆ์—ˆ์Œ
  • ์žฅ๊ณ ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ์ฝ”๋“œ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊นŠ์ด ์—ฐ๊ตฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋จ
  • AWS ๋ฐฐํฌ๋ฅผ ํ†ตํ•ด ์•„๋งˆ์กด ์›น ์„œ๋น„์Šค๋ฅผ ์ฒ˜์Œ ํ™œ์šฉ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ๋จ

๐ŸŽŠ11. ์ฐธ๊ณ ๋งํฌ

๐Ÿ“– Velog : https://han.gl/btewiM

โค๏ธ EST soft : ๋Œ€์ƒ ์ˆ˜์ƒ ํ”„๋กœ์ ํŠธ(https://url.kr/br6yg7)

๐Ÿง‘12. ๊ฐœ๋ฐœ์ž : ๊น€์ •์›(Back-End Developer)

About

[EstSoft] Django Mini Project1

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors