๐Ÿ’ก CBV

 

Django์—์„œ๋Š” ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๋ทฐ (Class Based View)๋ฅผ ์‚ฌ์šฉํ•ด 

์ผ๋ฐ˜์ ์ธ ์›น ๊ฐœ๋ฐœ ์ž‘์—…์„ ๋ณด๋‹ค ์‰ฝ๊ณ  ๊ตฌ์กฐํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋Ÿฌํ•œ CBV๋Š” 'View'๋ฅผ ์ง์ ‘ ์ƒ์†๋ฐ›์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ,

Django์—์„œ๋Š” ๋ทฐ์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ CBV๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

๊ฐ ๋ทฐ๋ฅผ ๋น„๊ตํ•ด ๋ณด์ž.

 

View ํด๋ž˜์Šค

๊ธฐ๋ณธ์ ์ธ HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ

๋ชจ๋“  ๋™์ž‘์„ ์ง์ ‘ ์ œ์–ดํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ

๋งค์šฐ ์œ ์—ฐํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ๋™์ž‘๋“ค์„ ๋ชจ๋‘ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ์–‘์ด ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์Œ

 

1. ํ•„์š”ํ•œ HTTP๋ฉ”์„œ๋“œ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

2. ๋ทฐ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ „๋‹ฌ

3. ์›ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ๋ Œ๋”๋งํ•˜์—ฌ HTTP ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜

from django.http import HttpResponse
from django.views.generic import View

class MyView(View):
    def get(self, request):
        # GET ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
        return HttpResponse("This is a GET request")

    def post(self, request):
        # POST ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
        return HttpResponse("This is a POST request")

 

ListView ํด๋ž˜์Šค

๋ฐ์ดํ„ฐ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ทฐ์— ์‚ฌ์šฉ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฟผ๋ฆฌ์…‹์„ ๊ฐ€์ ธ์™€ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

๋ชฉ๋ก ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ

DetailView ํด๋ž˜์Šค

๋‹จ์ผ ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ทฐ์— ์‚ฌ์šฉ

ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์™€ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

์ƒ์„ธ ์ •๋ณด ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ

CreateView, UpdateView, DeleteView ๋“ฑ

๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ทฐ์— ์‚ฌ์šฉ

form์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

๊ฐ๊ฐ€์˜ ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ๋™์ž‘๋“ค์ด ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ

 

 


๐Ÿ’ก FBV

 

Function Based View๋ฅผ ์‚ฌ์šฉํ•ด ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

FBV๋Š” ๋‹จ์ˆœํ•œ ํ•จ์ˆ˜๋กœ ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ทฐ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ทฐ๋ฅผ ํ•จ์ˆ˜๋กœ ์ •์˜ํ•˜๊ณ , ํ•ด๋‹น ํ•จ์ˆ˜์—์„œ ์š”์ฒญ (request)์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต (response)์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

from django.http import HttpResponse

def my_view(request):
    # ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    return HttpResponse("This is a function-based view")

์œ„ ์˜ˆ์ œ ์ฝ”๋“œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ

FBV๋Š” ์š”์ฒญ(request) ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

Django์—์„œ FBV๋ฅผ ์ž‘์„ฑํ•  ๋•Œ, ๋ทฐ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ธ์ž๋กœ 'request' ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

'request' ๊ฐ์ฒด๋Š” ์›น ์š”์ฒญ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ,

ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ, ์„ธ์…˜ ์ •๋ณด, ์‚ฌ์šฉ์ž ์ •๋ณด ๋“ฑ์„ ํฌํ•จํ•œ๋‹ค.

'WebFramework > [Django]' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Django] APIView CRUD ์˜ˆ์ œ ์ฝ”๋“œ  (0) 2023.08.23
[Django] Serializer์— List ์ •์˜ํ•˜๊ธฐ  (0) 2023.08.23
[Django] extends์™€ include  (0) 2023.07.26
[Django] docker-Django ์ ‘์†ํ•˜๊ธฐ  (0) 2023.07.11