Meme's IT

[Django] 게시판 만들기 - 글 작성 본문

BackEnd/Django

[Django] 게시판 만들기 - 글 작성

Memez 2023. 9. 26. 15:45

 

앞의 글과 이어집니다.


 

게시판에서 새로운 글을 작성할 수 있는 페이지를 만들어 보자

이때, 필요한 함수는 총 몇가지 일까?

  • 사용자 입력 데이터를 받을 페이지를 렌더링 하는 new함수
  • 사용자가 입력한 데이터를 받아 DB에 저장하는 create함수가 필요하다.

 

# new함수

1. url 추가해주기

from django.urls import path
from . import views

urlpatterns = [
    # 전체 게시글 조회
    path('', views.index, name='index'),
    # 단일 게시글 조회
    path('<int:pk>/', views.detail, name='detail'),
    # 게시글 새로 쓰기
    path('new/',views.new, name='new'),
    path('create/', views.create, name='create'),
]

 

 

2. views.pynew함수 추가해주기

new함수는 사용자 입력을 받기만 하는 역할이므로 바로 render해주면 된다.

def new(request):
    return render(request,'articles/new.html')

 

 

3. new.html 파일 만들어주기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>new</title>
</head>
<body>
    <h1>새로운 글 작성</h1>
    <form action="{% url "create" %}" method="GET">
        <div>
            <label for="title">제목: </label>
            <input type="text" name="title" id="title">
        </div>
        <div>
            <label for="content">내용: </label>
            <textarea name="content" id="content"></textarea>
        </div>
        <input type="submit" value="생성하기">
    </form>
</body>
</html>

위의 html코드에서 

<form action="{% url "create" %}" method="GET">

method = "GET" 은 어떤걸 의미하는 걸까? 참고   

→ method = "POST"로 바꿔주고 CSRF Token을 추가해줘야함

<h1>새로운 글 작성</h1>
<form action="{% url "create" %}" method="POST">
    {% csrf_token %}
    <div>
        <label for="title">제목: </label>
        <input type="text" name="title" id="title">
    </div>
    <div>
        <label for="content">내용: </label>
        <textarea name="content" id="content"></textarea>
    </div>
    <input type="submit" value="생성하기">
</form>

이를 적용해서 new.html의 body부분을 다음과 같이 바꿔준다.

 

 

# create함수

만들기 전에....

게시글 작성 후, 완료했다는 페이지가 꼭 필요할까?

NO.... 굳이 안만들고 바로 전체 게시물 페이지 or 작성한 글의 페이지로 넘어가는 것이 더 맞다..

그래서 필요한게 redirect

redirect() : 클라이언트가 인자에 작성된 주소로 다시 요청을 보내도록 하는 함수

→ create함수는 redirect를 이용해서 구현

 

# views.py

def create(request):
    title = request.POST.get('title')
    content = request.POST.get('content')
    article = Article(title = title, content= content)
    article.save()
    return redirect('detail', article.pk)

 

이후 서버를 열어 articles/new 에서 새로운 글을 작성할 수 있다.

글을 작성하면

Detail 페이지로 가는 것을 확인할 수 있다.

'BackEnd > Django' 카테고리의 다른 글

[Django] 게시판 만들기 - 수정  (0) 2023.09.26
[Django] 게시판 만들기 - 삭제  (0) 2023.09.26
[Django] 게시판 만들기 - 조회  (0) 2023.09.26
[Django] QuerySet API 사용해보기  (0) 2023.09.15
[Django] ORM과 QuerySet API  (0) 2023.09.15