Chapter 4-3 Django 작성 기능 만들기 with Form

2025. 5. 7. 10:29·Django
목차
  1. 📝 Django Forms로 블로그 글 작성 기능 만들기
  2. 💡 Django Forms의 핵심 역할
  3. 1️⃣ 블로그 폼 정의하기 (forms.py)
  4. 2️⃣ 뷰에서 BlogForm 활용 (views.py)
  5. 3️⃣ URL 패턴에 create 경로 추가 (urls.py)
  6. 4️⃣ 블로그 작성 템플릿 구성 (blog_create.html)
  7. 5️⃣ 로그인 리디렉션 처리 (member/views.py)
  8. 6️⃣ 최신 글이 위로 오도록 정렬 (blog_list)
  9. 7️⃣ 블로그 목록 페이지에 글쓰기 버튼 추가
  10. ✅ 요약 체크리스트

📝 Django Forms로 블로그 글 작성 기능 만들기

💡 Django Forms의 핵심 역할

  1. HTML <form> 자동 생성
  2. 데이터 유효성 검사 (Validation)
  3. 모델 인스턴스 저장 및 업데이트

1️⃣ 블로그 폼 정의하기 (forms.py)

경로: blog/forms.py

from django import forms
from blog.models import Blog

class BlogForm(forms.ModelForm):
    class Meta:
        model = Blog
        fields = ('title', 'content')  # 필요한 필드만 선택 가능, 전체는 '__all__'

📌 ModelForm을 상속하여 모델 기반의 폼 자동 생성
📌 사용자 입력을 받아 Blog 모델에 저장 가능


2️⃣ 뷰에서 BlogForm 활용 (views.py)

from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect, reverse, get_object_or_404
from blog.forms import BlogForm
from blog.models import Blog

@login_required()
def blog_create(request):
    form = BlogForm(request.POST or None)  # POST 요청 시 데이터 포함, 아니면 빈 폼

    if form.is_valid():
        blog = form.save(commit=False)  # DB 저장 전 author 정보 추가를 위해 지연
        blog.author = request.user
        blog.save()
        return redirect(reverse('blog_detail', kwargs={'pk': blog.pk}))

    context = {'form': form}
    return render(request, 'blog_create.html', context)

📌 commit=False를 통해 author처럼 폼에 없는 필드를 수동 설정 가능
📌 @login_required() 데코레이터로 인증된 사용자만 접근 허용
📌 로그인하지 않은 경우 settings.LOGIN_URL로 리디렉션됨


3️⃣ URL 패턴에 create 경로 추가 (urls.py)

path('create/', views.blog_create, name='blog_create'),

📌 /create/ URL에 블로그 작성 페이지 연결


4️⃣ 블로그 작성 템플릿 구성 (blog_create.html)

{% extends 'base.html' %}
{% block content %}
 <h1>블로그 작성</h1>
 <form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button>생성</button>
</form>
{% endblock %}

📌 form.as_p는 입력 필드를 <p>로 감싸 출력
📌 CSRF 토큰 필수 포함


5️⃣ 로그인 리디렉션 처리 (member/views.py)

def login(request):
    form = AuthenticationForm(request, request.POST or None)
    if form.is_valid():
        django_login(request, form.get_user())

        next = request.GET.get('next')  # 로그인 이전 접근 경로 기억
        if next:
            return redirect(next)

        return redirect(reverse('blog_list'))

    context = {'form': form}
    return render(request, 'registration/login.html', context)

📌 비로그인 상태에서 /create/ 접근 시 로그인 후 자동 리디렉션됨


6️⃣ 최신 글이 위로 오도록 정렬 (blog_list)

def blog_list(request):
    blogs = Blog.objects.all().order_by('-created_at')  # 최신순 정렬
    context = {'blogs': blogs}
    return render(request, 'blog_list.html', context)

7️⃣ 블로그 목록 페이지에 글쓰기 버튼 추가

{% block content %}
<h1>블로그 목록</h1>
<p style="text-align: right">
    <a href="{% url 'blog_create' %}">생성</a>
</p>
{% for blog in blogs %}
    <p>
        <a href="{% url 'blog_detail' blog.pk %}">
            {{ blog.title }} - <small>{{ blog.created_at|date:"Y-m-d" }}</small>
        </a>
    </p>
{% endfor %}
{% endblock %}

📌 로그인하지 않은 상태에서 버튼 클릭 시 로그인 페이지로 이동


✅ 요약 체크리스트

항목 설명

BlogForm 작성 ✅ forms.ModelForm 상속으로 구현
뷰 함수 구현 ✅ commit=False → author 수동 추가
로그인 필수 ✅ @login_required() 적용
로그인 후 리디렉션 ✅ ?next=/create/ 처리
템플릿 연결 ✅ 작성 버튼 및 작성 폼 구성 완료

💬 Django의 Form과 인증 시스템을 함께 활용하면, 안전하고 효율적인 사용자 입력 기능을 구현할 수 있습니다!

'Django' 카테고리의 다른 글

Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기  (0) 2025.05.07
Chapter 4-4 Django 블로그 수정 기능 구현 (작성자만 수정 가능)  (0) 2025.05.07
Chapter 4-1 Django [블로그] 상세페이지에 작성자 정보 추가하기  (0) 2025.05.07
Chapter 3-7 Django 회원가입(SignUp) 및 로그인(Login) 페이지 만들기  (0) 2025.05.06
Chapter 3-6 Django 회원가입(SignUp) 페이지 만들기  (0) 2025.05.06
  1. 📝 Django Forms로 블로그 글 작성 기능 만들기
  2. 💡 Django Forms의 핵심 역할
  3. 1️⃣ 블로그 폼 정의하기 (forms.py)
  4. 2️⃣ 뷰에서 BlogForm 활용 (views.py)
  5. 3️⃣ URL 패턴에 create 경로 추가 (urls.py)
  6. 4️⃣ 블로그 작성 템플릿 구성 (blog_create.html)
  7. 5️⃣ 로그인 리디렉션 처리 (member/views.py)
  8. 6️⃣ 최신 글이 위로 오도록 정렬 (blog_list)
  9. 7️⃣ 블로그 목록 페이지에 글쓰기 버튼 추가
  10. ✅ 요약 체크리스트
'Django' 카테고리의 다른 글
  • Chapter 4-5 Django 블로그에 페이지네이션(Pagination) 기능 구현하기
  • Chapter 4-4 Django 블로그 수정 기능 구현 (작성자만 수정 가능)
  • Chapter 4-1 Django [블로그] 상세페이지에 작성자 정보 추가하기
  • Chapter 3-7 Django 회원가입(SignUp) 및 로그인(Login) 페이지 만들기
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (582) N
      • Python (31)
      • 프로젝트 (43)
      • 과제 (25)
      • Database (40)
      • 멘토링 (10)
      • 특강 (26)
      • 기술블로그 (196) N
      • AI 분석 (3)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (58)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 4-3 Django 작성 기능 만들기 with Form

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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