Django CRUD 기능

찬민·2024년 8월 27일

TIL

목록 보기
44/62

Django에서 조회, 등록, 수정, 삭제 기능 구현하기

Django 웹 애플리케이션에서 게시글의 조회, 등록, 수정, 삭제(CRUD) 기능을 구현하는 방법을 다룬다. CRUD 기능은 웹 애플리케이션의 기본 요소로, 사용자가 게시글을 작성하고 관리할 수 있게 한다.

1. 조회 기능

조회 기능은 사용자가 메인 페이지에서 게시글 목록을 볼 수 있도록 한다. index 뷰에서 모든 게시글을 데이터베이스에서 가져와 템플릿에 전달한다.

def index(request):
    products = Product.objects.all().order_by('-created_at')  # 게시글 목록 조회
    context = {
        'products': products,
    }
    return render(request, 'products/index.html', context)

이 코드에서는 모든 게시글을 작성된 순서대로 정렬하여 사용자에게 보여준다.

2. 등록 기능

등록 기능은 사용자가 새로운 게시글을 작성할 수 있게 한다. create 뷰에서는 POST 요청을 통해 전달된 데이터를 저장하고, GET 요청을 통해 게시글 작성 폼을 사용자에게 보여준다.

@login_required
def create(request):
    if request.method == 'POST':
        form = ProductForm(request.POST, request.FILES)
        if form.is_valid():
            product = form.save(commit=False)
            product.author = request.user
            product.save()
            return redirect('products:details', product.pk)
    else:
        form = ProductForm()
    context = {
        'form': form
    }
    return render(request, 'products/create.html', context)

이 코드에서는 사용자가 작성한 게시글 데이터를 데이터베이스에 저장하고, 저장이 완료되면 해당 게시글의 상세 페이지로 리다이렉트한다.

3. 수정 기능

수정 기능은 사용자가 기존 게시글을 수정할 수 있게 한다. update 뷰에서는 GET 요청으로 수정 폼을 보여주고, POST 요청으로 수정된 데이터를 저장한다.

@require_http_methods(['GET', 'POST'])
def update(request, pk):
    product = get_object_or_404(Product, pk=pk)
    if request.user == product.author:
        if request.method == 'POST':
            form = ProductForm(request.POST, request.FILES, instance=product)
            if form.is_valid():
                product = form.save()
                return redirect("products:details", product.pk)
        else:
            form = ProductForm(instance=product)

        context = {
            'product': product,
            'form': form,
        }
        return render(request, 'products/update.html', context)
    else:
        return redirect('products:details', product.pk)

이 코드에서는 사용자가 게시글의 작성자인 경우에만 게시글을 수정할 수 있도록 하며, 수정이 완료되면 게시글의 상세 페이지로 리다이렉트한다.

4. 삭제 기능

삭제 기능은 사용자가 게시글을 삭제할 수 있게 한다. delete 뷰에서는 POST 요청을 받아 게시글을 삭제한다.

@require_POST
def delete(request, pk):
    product = get_object_or_404(Product, pk=pk)
    if request.user == product.author:
        product.delete()
        return redirect('index')
    else:
        return redirect('products:details', product.pk)

이 코드에서는 사용자가 게시글의 작성자인 경우에만 게시글을 삭제할 수 있도록 하며, 삭제가 완료되면 메인 페이지로 리다이렉트한다.

0개의 댓글