[django] django CURD (피로그래밍 세션)

woo·2022년 2월 16일
0

django

목록 보기
2/4

🖐CRUD란?

데이터 처리기능인 Create(생성), Read(읽기), Update(갱신, 수정), Delete(삭제)의 약자이다.

✔ 0. config urls, app form.py

먼저, 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

✔ 1. urls

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'), #카테고리삭제
] 

✔ 2. views

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)

✔ 3. templates

views.py 에서 넘겨준 context를 {{}}로 html에서 불러와주면 된다!

profile
🌱 매일 성장하는 개발자

0개의 댓글

관련 채용 정보