๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ก์›น ํ”„๋กœ์ ํŠธ/(๋ฐฑ์—”๋“œ)Django - ํ”„๋กœ์ ํŠธ01

ํด๋ž˜์Šคํ˜• view

ํŠน์ • DB table์˜ ๋ชจ๋“  record๋ฅผ ๊ฐ€์ ธ์™€์„œ List๋กœ ํ‘œ์‹œ(๊ฒŒ์‹œํŒ ๊ธ€ ๋ชฉ๋ก ์ „์ฒด) ๋˜๋Š” Detail ๋‚ด์šฉ ํ‘œ์‹œ (๊ฒŒ์‹œํŒ์˜ ํŠน์ • ๊ธ€ ์ƒ์„ธ ๋‚ด์šฉ) ๋“ฑ์„ ํ•˜๋ ค๋ฉด ํด๋ž˜์Šคํ˜• view๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๊ธ€[Django] - detail, update, delete๊ตฌํ˜„

ํ•ด๋ณด๊ธฐ ์ „์— ํด๋ž˜์Šคํ˜• view์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • 1. ํด๋ž˜์Šคํ˜• view ์ž‘์„ฑ ๋ฐฉ๋ฒ•
  • 2. ํด๋ž˜์Šคํ˜• ๋ทฐ์˜ ์žฅ์ 
  • 3. ์ œ๋„ค๋ฆญ ๋ทฐ 
  • 4. ํด๋ž˜์Šคํ˜• ๋ทฐ์—์„œ ํผ ์ฒ˜๋ฆฌํ•˜๊ธฐ

 

<ํด๋ž˜์Šคํ˜• view>

1. ํด๋ž˜์Šคํ˜• view ์ž‘์„ฑ ๋ฐฉ๋ฒ•

1-1) URL conf

  •  as.view() : ํด๋ž˜์Šค์˜ instance๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ instance์˜ dispatch()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ง„์ž… ๋ฉ”์†Œ๋“œ. 
  • dispatch() : HTTP ๋ฉ”์†Œ๋“œ ๊ฒ€์‚ฌํ•˜๊ณ  ์ค‘๊ณ„ํ•จ.
from django.urls import path
from myapp.views import MyView

urlpatterns = [
	path('about/' MyView.as_view()),
]

 

1-2) MyView ์ •์˜

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

class MyView(View):
	def get(self, request):
    	# ๋ทฐ ๋กœ์ง ์ž‘์„ฑ
        return HttpResponse('result')

 

 

2. ํด๋ž˜์Šคํ˜• view์˜ ์žฅ์ 

  • HTTP๋ฉ”์†Œ๋“œ์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ฝ”๋”ฉํ•  ๋•Œ, IFํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์†Œ๋“œ๋ช…์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๊ฐ€ ๊น”๋”ํ•ด์ง„๋‹ค.
  • ๋‹ค์ค‘ ์ƒ์†๊ณผ ๊ฐ™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ๊ธฐ์ˆ ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ํด๋ž˜์Šคํ˜• generic view ๋ฐ mixin class๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด๋‚˜ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.

 

 

3. ์ œ๋„ค๋ฆญ ๋ทฐ : ๊ธฐ๋ณธ ์ œ๊ณต ํด๋ž˜์Šคํ˜• ๋ทฐ์ด๋‹ค. ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

4. ํด๋ž˜์Šคํ˜• ๋ทฐ์—์„œ ํผ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๋ฐฉ๋ฒ•โ‘  - ์ œ๋„ค๋ฆญ ๋ทฐ ์ƒ์†ํ•˜์ง€ ์•Š๊ณ  form์ฒ˜๋ฆฌ

from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.views.generic import View

from .forms import MyForm

class MyFormView(View):    
	form_class = MyForm    
    initial = {'key': 'value'}
    template_name = 'form_template.html'
    
    def get(self, request, *args, **kwargs):         # ์ตœ์ดˆ์˜ GET
    	form = self.form_class(initial=self.initial)
        return render(request, self.template_name, {'form': form})    
        
    def post(self, request, *args, **kwargs):
    	form = self.form_class(request.POST)
        if form.is_valid():
        # cleaned_data๋กœ ๊ด€๋ จ ๋กœ์ง ์ฒ˜๋ฆฌ
        return HttpResponseRedirect('/success/')      # ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ POST
        
    return render(request, self.template_name, {'form': form}   # ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ POST

 

๋ฐฉ๋ฒ•โ‘ก - ์ œ๋„ค๋ฆญ ๋ทฐ๋ฅผ ์ƒ์†ํ•ด form์ฒ˜๋ฆฌ : ์ œ๋„ค๋ฆญ ๋ทฐ FormVIew๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด get, post์ •์˜ ๋ถˆํ•„์š”ํ•˜๋‹ค.

from .forms import MyForm
from django.views.generic.edit import FormView

class MyFormView(FormView):
	form_class = MyForm
	template_name = 'form_template.html'
    success_url = '/thanks/'      #์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์ด๋™ํ•  URL
    
    def form_valid(self, form):
    	# cleaned_data๋กœ ๊ด€๋ จ ๋กœ์ง ์ฒ˜๋ฆฌ
        return super(MyFormView, self).form_valid(form)    #์œ ํšจํ•œ ํผ ๋ฐ์ดํ„ฐ๋กœ ์ฒ˜๋ฆฌํ•  ๋กœ์ง ์ฝ”๋”ฉ. super()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, success_url๋กœ ์ง€์ •๋œ URL๋กœ ์ด๋™