forms.py 이용해 웹 페이지에서 CRUD하기

2024. 2. 26. 17:48·공부/Django

1. 앱 디렉토리에 forms.py 생성

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    title = forms.CharField()
    contents = forms.CharField()

    class Meta :
        model = Post # form과 model 연결
        fields = ['title', 'contents', 'main_image'] 
        # fields = '__all__' # 피드를 한꺼번에 지정할 수도 있음

2. html에 form 작성

<h1>create</h1>

<p style="color:red;">{{ error }}</p>
<form action="{% url 'create'%}" method="post" enctype="multipart/form-data"> # enctype : 파일첨부시 추가
    {% csrf_token %} # 해킹 공격 방어를 위한 토큰

    {{ form }}

    <button type="submit">저장</button>
</form>

3. views.py에서 POST 처리

def create(request):
    if request.method == "POST" :
        form = PostForm(request.POST, request.FILES)

        if form.is_valid():
            post = form.save(commit=False) # 수정할 것 없으면 commit 생략
            # post.author = "user1" # form에 입력되지 않은 정보 추가할 수 있음

            post.save()

            return redirect("/blog")
        else : 
            context = {"form": form, "error":"잘못된 입력입니다."}
            return render(request, 'blog/create.html', context)
    else :
        form = PostForm()
        context = {"form": form}
        return render(request, 'blog/create.html', context)


def blog_update(request, pk):
    post = get_object_or_404(Post, pk=pk)

    if request.method == "POST":
        form = PostForm(request.POST, request.FILES, instance=post)
        if form.is_valid():
            form.save()
            return redirect("blog_details", pk=post.pk)
    else:
        form = PostForm(instance=post)
        context = {"form": form, "pk": pk}
        return render(request, "blog/blog_update.html", context)


def blog_delete(request, pk):
    post = get_object_or_404(Post, pk=pk)

    if request.method == "POST":
        post.delete()
    return redirect("blog_list")

'공부 > Django' 카테고리의 다른 글

Lightsail로 Django DRF https 배포하기 - 1. 서버세팅  (1) 2024.04.25
CBV로 블로그 CRUD 예제  (1) 2024.02.27
CBV로 Django auth 구현  (0) 2024.02.27
장고 Model 세팅 + Q검색  (0) 2024.02.25
장고 프로젝트 세팅  (0) 2024.02.25
'공부/Django' 카테고리의 다른 글
  • CBV로 블로그 CRUD 예제
  • CBV로 Django auth 구현
  • 장고 Model 세팅 + Q검색
  • 장고 프로젝트 세팅
김고사리/
김고사리/
김고사리/
<bracken/>
김고사리/
전체
오늘
어제
  • 분류 전체보기 (23)
    • 개발얘기 (3)
    • 공부 (17)
      • Django (8)
      • 코테 (4)
      • GPT와의 대화 (5)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 오름캠프백엔드
  • 백엔드
  • 오름캠프
  • 위니브
  • 제주코딩베이스캠프
  • 모두의연구소

최근 글

hELLO· Designed By정상우.v4.5.2
김고사리/
forms.py 이용해 웹 페이지에서 CRUD하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.