앞의 글과 이어집니다.
게시판에서 새로운 글을 작성할 수 있는 페이지를 만들어 보자
이때, 필요한 함수는 총 몇가지 일까?
- 사용자 입력 데이터를 받을 페이지를 렌더링 하는 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.py에 new함수 추가해주기
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] 게시판 만들기 - 삭제 (1) | 2023.09.26 |
| [Django] 게시판 만들기 - 조회 (0) | 2023.09.26 |
| [Django] QuerySet API 사용해보기 (1) | 2023.09.15 |
| [Django] ORM과 QuerySet API (1) | 2023.09.15 |