C.R.U.D 복습

김나현·2024년 9월 6일
1

Create

def post_create(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('post_list')
    else:
        form = PostForm()
    return render(request, 'posts/form.html', {'form': form})

post_create라는 이름의 뷰 함수를 정의합니다. 이 함수는 사용자의 요청(request)을 받아 처리합니다.

사용자가 제출한 데이터를 PostForm 폼 객체form에 담습니다. request.POST는 사용자가 제출한 폼 데이터를 포함하고 있습니다.

사용자가 폼을 제출하면, 제출된 데이터를 검증하고 유효하다면 데이터베이스에 저장합니다.
데이터 저장 후, 게시물 목록 페이지로 리디렉션합니다.
사용자가 폼을 처음 열었을 때는 빈 폼을 보여줍니다.

Read

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'posts/index.html', {'posts': posts})

Post.objects.all():
데이터베이스에서 모든 게시물 객체를 조회합니다.

render(request, 'posts/index.html', {'posts': posts}):
조회된 게시물들을 index.html 템플릿에 전달하여 웹 페이지를 생성합니다.

posts 폴더 안에 있는 index.html 파일을 사용합니다.
{'posts': posts}: 컨텍스트 딕셔너리입니다. 이 딕셔너리는 템플릿에서 사용할 데이터(여기서는 posts 변수)를 전달합니다.

참고
"모든 레코드"는 데이터베이스 테이블에 저장된 모든 데이터 항목을 의미합니다. 데이터를 테이블의 행(row)으로 저장하고 각 행은 레코드(record)로 불립니다.
레코드: 데이터베이스 테이블의 각 행을 의미합니다.
모든 레코드: 테이블에 저장된 모든 데이터를 의미합니다.

Update

def post_update(request, post_id):
    post = get_object_or_404(Post, pk=post_id) 
    post = Post.objects.get(pk=post_id) # 모두 정답
  
    if request.method == 'POST':
        form = PostForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            return redirect('post_list')
    else:
        form = PostForm(instance=post)
    return render(request, 'posts/form.html', {'form': form})

사용자가 수정할 게시물을 데이터베이스에서 가져옵니다.
요청이 POST일 때는 제출된 폼 데이터를 사용하여 게시물을 업데이트합니다.
요청이 GET일 때는 현재 게시물 데이터를 포함한 빈 폼을 사용자에게 보여줍니다.
폼을 통해 게시물을 수정할 수 있는 페이지를 렌더링합니다.

post = get_object_or_404(Post, pk=post_id):
Post 모델에서 pk가 post_id인 객체를 데이터베이스에서 조회합니다.
만약 post_id에 해당하는 Post 객체가 존재하면, 이 객체가 post 변수에 저장됩니다.
만약 post_id에 해당하는 객체가 존재하지 않으면, Django는 자동으로 404 오류 페이지를 반환합니다.

Delete

def post_delete(request, post_id):
    post = get_object_or_404(Post, pk=post_id) 
    post = Post.objects.get(pk=post_id) 
    
    if request.method == 'POST':
        post.delete()
        return redirect('post_list')
    return render(request, 'posts/confirm_delete.html', {'post': post})

삭제할 게시물을 데이터베이스에서 가져옵니다.
요청이 POST일 때, 사용자가 게시물 삭제를 확인하면 게시물을 삭제합니다.
요청이 GET일 때, 게시물을 삭제하기 전에 확인할 수 있는 페이지를 렌더링합니다.
게시물 삭제가 완료되면 게시물 목록 페이지로 리디렉션합니다.

def post_delete(request, post_id):
post_delete라는 이름의 뷰 함수를 정의합니다. request는 HTTP 요청 객체이고, post_id는 삭제할 게시물의 고유 ID입니다.

profile
참 쉽죠? #개발계의 밥아저씨를 꿈꿉니다⋆⁺₊⋆ ☾⋆⁺₊⋆

0개의 댓글