TIL 240402

hyeo71·2024년 4월 2일
0

2024 내배캠 AI 트랙

목록 보기
66/108

게시판 만들기

필수 요구사항

  • 게시물 CRUD
  • 댓글 CRUD

선택 요구사항

  • 관리자의 게시글 권한
  • 비밀글 작성기능
  • 조회수 많은 순, 최신순 정렬 조회
  • 회원가입, 로그인
  • 좋아요 기능
  • 유저 프로필 이미지 기능
  • 게시글에 이미지 첨부
  • 외부 API 사용

개발 환경

  • Django
  • JS
  • Sqlite3

게시물 CRUD

게시물 전체 목록 보기

# 목록 가져오기
def post_list(request):
    post_list = Post.objects.all() # 게시물 전체 가져오기
    paginator = Paginator(post_list, 8) # 8개 씩 페이지 구성
    current_page = request.GET.get("page") # 현재 페이지
    if current_page is None:
        current_page = 1
    page = paginator.page(current_page)
    return render(request, "posts/post_list.html", {"page": page})

게시물 상세 페이지

# 상세 페이지
def post_detail(request, post_id):
	# 원하는 id의 게시물이 존재하는지 여부/가져오기
    post = get_object_or_404(Post, id=post_id) 
    return render(request, "posts/post_detail.html", {"post": post})

게시물 생성

# 게시물 생성
def post_create(request):
    if request.method == "POST": # method가 POST일 때
        form = PostForm(request.POST)
        if form.is_valid(): # 유효성 검사
            new_post = form.save() # DB에 저장
            return redirect("post-detail", post_id=new_post.id)
    else: # method가 POST가 아닐 때(ex: GET)
        form = PostForm()
    return render(request, "posts/post_form.html", {"form": form})

게시물 수정

# 게시물 수정
def post_update(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    if request.method == "POST":
    	# 새로 입력받은 데이터로 수정
        form = PostForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            return redirect("post-detail", post_id=post.id)
    else:
    	# 해당 게시물의 기존 데이터 전달
        form = PostForm(instance=post)
    return render(request, "posts/post_form.html", {"form": form})

게시물 삭제

# 게시물 삭제
def page_delete(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    if request.method == "POST":
        post.delete()
        return redirect("post-list")
    else:
        return render(request, "posts/post_confirm_delete.html", {"post": post})

0개의 댓글