ํน์ 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๋ก ์ด๋
'๐ก์น ํ๋ก์ ํธ > (๋ฐฑ์๋)Django - ํ๋ก์ ํธ01' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก์ ํธ01. bootstrap ์ ์ฉํ๊ธฐ (0) | 2019.12.11 |
---|---|
ํ๋ก์ ํธ01. ํจ์ํ ๋ทฐ์์ ํด๋์คํ ๋ทฐ๋ก ๋ณ๊ฒฝ & detail, update, delete๊ตฌํ (0) | 2019.12.09 |
ํ๋ก์ ํธ01. admin ์ฌ์ดํธ์ model class ๋ฑ๋กํ๊ธฐ (0) | 2019.12.09 |
ํ๋ก์ ํธ01. base.html์ค์ & modelform ์์ฑ (0) | 2019.12.08 |
ํ๋ก์ ํธ01. ๋ฉ๋ชจ ์น ๊ธฐํํ๊ธฐ & ๊ธ ์์ฑ ํผ ๋ง๋ค๊ธฐ (0) | 2019.12.04 |