데이터 처리기능인 Create(생성), Read(읽기), Update(갱신, 수정), Delete(삭제)의 약자이다.
먼저, config urls.py에 include로 app 경로 추가
그리고 app forms.py에 입력, 수정하는 form을 만듦
from django import forms
from .models import Category
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields =('__all__') #모든 필드를 입력받음
❗ app에서 구현하는 순서는 urls -> views -> templates
from django.urls import path
from . import views
app_name = 'bookmark'
urlpatterns = [
path('', views.list, name='list'),
path('<int:pk>/', views.cate_detail, name='cate_detail'), #카테고리읽기
path('cate_new/', views.cate_new, name='cate_new'), #카테고리생성
path('<int:pk>/cate_edit/', views.cate_edit, name='cate_edit'), #카테고리수정
path('<int:pk>/cate_delete/', views.cate_delete, name='cate_delete'), #카테고리삭제
]
from django.shortcuts import render, get_object_or_404,redirect
from bookmark.forms import CategoryForm
from bookmark.models import Category
# Create your views here.
def list(request):
cates = Category.objects.all() #카테고리에 있는 모든 값 불러오기
#딕셔너리화 (카테고리 : 마크)
order_marks ={}
for c in cates:
marks = Mark.objects.filter(category=c)
order_marks[c] = marks
ctx = {
'order_marks' : order_marks
}
return render(request ,'bookmark/list.html', context=ctx)
def cate_detail(request, pk):
cate = get_object_or_404(Category, pk=pk) #pk에 해당하는 Categort를 가져옴
marks = cate.mark_set.all() #FK로 연결되어있는 오브젝트를 가져오기 위해서는 _set
ctx = {
'cate' : cate,
'marks' : marks
}
return render(request ,'bookmark/cate_detail.html', context=ctx)
def cate_new(request): #forms.py 만들기
if request.method == "POST":
form = CategoryForm(request.POST)
if form.is_valid():
cate = form.save()
return redirect('bookmark:cate_detail', pk=cate.pk)
else: #GET이라면
form = CategoryForm() #CategoryForm을 화면에 뿌려줌!
ctx = {
'form':form
}
return render(request, 'bookmark/form.html', context=ctx)
def cate_edit(request, pk):
cate = get_object_or_404(Category, pk=pk)
if request.method == "POST":
form = CategoryForm(request.POST, instance=cate)
if form.is_valid():
cate = form.save()
return redirect('bookmark:cate_detail', pk=cate.pk)
else: #GET이라면
form = CategoryForm(instance=cate) #CategoryForm을 화면에 뿌려줌!
ctx = {
'form':form
}
return render(request, 'bookmark/form.html', context=ctx)
def cate_delete(request, pk):
cate = get_object_or_404(Category, pk=pk)
cate.delete()
return redirect('bookmark:list')
def mark_new(request):
if request.method == "POST":
form = MarkForm(request.POST)
if form.is_valid():
mark = form.save()
cate = mark.category #mark에 연결된 카테고리를 찾고싶을 때에는
return redirect('bookmark:cate_detail', pk=cate.pk)
else: #GET이라면
form = MarkForm()
ctx = {
'form':form
}
return render(request, 'bookmark/form.html', context=ctx) #mark랑 category랑 같은 폼을 씀!(forms.py)
views.py 에서 넘겨준 context를 {{}}로 html에서 불러와주면 된다!