FBV (Function Based View)์™€ CBV (Class Based View)

210724

FBV (Function Based View)๋กœ ๋ธ”๋กœ๊ทธ ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ํด๋”์— ์žˆ๋Š” urls.py ์—๋Š” admin/ ๋งŒ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด 127.0.0.1/blog ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ€๋ฉด 404 ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

urls.py ์— ์žˆ๋Š” urlpatterns ์€ ์ด์ •ํ‘œ์˜ ์˜๋ฏธ. ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. ์—ฌ๊ธฐ์— blog/ ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

urls.py

  • ์ด ๋•Œ include ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ import ํ•ด์ค˜์•ผ ํ•œ๋‹ค

  • blog ์•ฑ ํด๋”์—๋Š” ์•„์ง urls ๋ผ๋Š” ํŒŒ์ผ์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

blog/urls.py

  • ์ด ๋•Œ views.index ๋ฅผ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ views.py ์—์„œ index ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ค˜์•ผ ํ•œ๋‹ค.

  • ์ง€๊ธˆ์ฒ˜๋Ÿผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด FBV ๋ฐฉ๋ฒ•

blog/views.py

  • blog์˜ index.html์„ ๊ฐ€์ง€๊ณ  ๋ Œ๋”๋ง ํ•˜๋ผ๋Š” ๋œป

  • ๋”ฐ๋ผ์„œ index.html์ด ๋˜ ํ•„์š”ํ•˜๋‹ค.

    • templates ๋ผ๋Š” ํด๋” ์•ˆ์—, blog ๋ผ๋Š” ํด๋” ์•ˆ์— index.html์„ ๋งŒ๋“ ๋‹ค

    • templates/blog/index.html

    • ์•ฑ์˜ ๋…๋ฆฝ์„ฑ์„ ์œ„ํ•ด ์ด๋ ‡๊ฒŒ ์ž‘์—…ํ•˜๋ฉฐ ์ถ”ํ›„์— ์ถ”๊ฐ€ ์„ค๋ช…

blog/templates/blog/index.html

https://m.blog.naver.com/nuberus/221747636515
  • ์ง€๊ธˆ๊นŒ์ง€ ํ•œ ์ž‘์—…์€ ํด๋ผ์ด์–ธํŠธ์—์„œ View๋กœ ์š”์ฒญ์„ํ•˜๊ณ  View๊ฐ€ ํ…œํ”Œ๋ฆฟ์„ ๋ Œ๋”๋ง ํ•œ ํ›„ ์‘๋‹ต์„ ์ค€ ๊ณผ์ •์ด๋‹ค.

  • ์ด์ œ Model์—์„œ DB๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด์„œ ์‘๋‹ต์„ ์ฃผ๋Š” ๊ณผ์ •์„ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

blog/views.py

  • ๋ Œ๋”๋ง์˜ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ posts ๋ผ๋Š” dictionary๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

    • ์ด posts๋Š” models.py์— ์žˆ๋Š” post class์ด๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ์˜ ํŒŒ์ผ๋“ค์€ ํŠน๋ณ„ํ•œ ๋ช…์‹œ๊ฐ€ ์—†์œผ๋ฉด ๋ชจ๋‘ blog ์•ฑ ๋‚ด๋ถ€์— ์žˆ๋Š” ํŒŒ์ผ์ด๋‹ค.

index.html

  • 10-12

    • html์—์„œ ๋™์ ์–ธ์–ด๋ฅผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ๋” ์žฅ๊ณ ์—์„œ ์ง€์›ํ•œ๋‹ค.

    • for๋ฌธ์„ ์‹œ์ž‘ํ•  ๋•Œ์™€ ๋๋‚  ๋•Œ {% %} ๋ฅผ ์จ์ค€๋‹ค.

    • posts๋Š” views.py์— ์žˆ๋Š” dictionary ๊ฐ’์œผ๋กœ 'posts' key์— ๋Œ€ํ•œ value ๊ฐ’๋“ค์„ ํ•˜๋‚˜์”ฉ <h3> ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋˜๊ฒŒ ํ•œ๋‹ค.

  • ์ด ๋•Œ ์–ด๋–ป๊ฒŒ p ๋ฅผ ๋ถ€๋ฅด๊ธฐ๋งŒ ํ•ด๋„ db์— ์ €์žฅ๋œ ๋‚ด์šฉ์ด ๋‹ค ๋œฐ๊นŒ?

    • ์ด์œ ๋Š” models.py์— ์ •์˜๋˜์–ด์žˆ๋Š” __str__ ํ•จ์ˆ˜ ๋•Œ๋ฌธ

models.py

์ข€ ๋” ์ถ”๊ฐ€ํ•ด๋ณด์ž.

index.html

๋˜ํ•œ, posts์˜ ๊ฐ’๋“ค์„ ํŠน์ • ํ…Œ์ด๋ธ”๊ฐ’์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

views.py

  • ์—ฌ๊ธฐ์„œ objects.all()์€ ์ฟผ๋ฆฌ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

FBV (Function Based View)๋กœ ๋ธ”๋กœ๊ทธ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

blog ํŽ˜์ด์ง€์—์„œ ๊ฒŒ์‹œ๊ธ€์„ ๋ˆŒ๋ €์„ ๋•Œ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ณผ์ •์„ ๊ตฌ์„ฑํ•  ๊ฒƒ์ž„

urls.py

  • <> ์•ˆ์—๋Š” ์ž๋ฃŒํ˜•์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ pk๊ฐ€ ์ •์ˆ˜๋กœ ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€๋Šฅ

  • views.py ์— single_post_page ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž„

views.py

single_page.html

์—ฌ๊ธฐ์„œ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ชจ๋“  /blog ๋กœ ์ด๋™ํ•œ๋‹ค.

index.html

  • ์—ฌ๊ธฐ์„œ p.get_absolute_url ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ model.py ์—์„œ ์ •์˜ํ•ด์ค˜์•ผ ํ•˜๋Š” ํ•จ์ˆ˜์ด์ง€๋งŒ ์žฅ๊ณ ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

    • ์žฅ๊ณ ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค๋Š” ๋œป

models.py

๊ฐ ํฌ์ŠคํŠธ์—์„œ /blog๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ admin ํŽ˜์ด์ง€์—์„œ๋„ view on site ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

FBV๋กœ ๋Œ€๋ฌธ ํŽ˜์ด์ง€ ์ž๊ธฐ์†Œ๊ฐœํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

127.0.0.1/8000 ์—์„œ blog๋‚˜ admin์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋Œ€๋ฌธ ํŽ˜์ด์ง€๋„ ๋งˆ๋ จํ•ด์ฃผ์ž.

urls.py

single_pages/urls.py

single_pages/views.py

single_pages/templates/single_pages/landing.html

CBV๋กœ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ๋ชฉ๋ก ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

์žฅ๊ณ ์—์„œ ์ด๋Ÿฌํ•œ ๋ธ”๋กœ๊ทธ ํŽ˜์ด์ง€๋“ค์„ ํด๋ž˜์Šค๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

blog/urls.py

blog/views.py

์ด ๋•Œ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด,

์•„๋ฌด๊ฒƒ๋„ ๋œจ์ง€ ์•Š๋Š”๋‹ค. ์ด๋Š”,

index.html

๋ฐ˜๋ณต๋ฌธ์—์„œ posts์— ํ•ด๋‹นํ•˜๋Š” dictionary๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์žฅ๊ณ ์—์„œ ์ œ๊ณตํ•˜๋Š” CBV๋Š” dictionary ๋ณ€์ˆ˜๋ฅผ post_list๋กœ ์ •์˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋˜ํ•œ, views.py ์—์„œ template_name์„ ์„ ์–ธํ•ด์ฃผ์ง€ ์•Š๊ณ  template ํŒŒ์ผ ์ด๋ฆ„์„ post_list ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋˜, ์ˆœ์„œ๋„ ์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

views.py

CBV๋กœ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ์ƒ์„ธ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ single_page๋„ ํด๋ž˜์Šค๋กœ ์„ ์–ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

views.py

๊ทธ๋ฆฌ๊ณ  ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ ์ด๋ฆ„์„ post_detail.html ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, url๋„ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋.

urls.py

์žฅ๊ณ ์—์„œ๋Š” CBV๋กœ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๊ฒƒ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ๋Š” ์†Œ๋ชจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— CBV๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค!

Last updated

Was this helpful?