본문 바로가기
Web Programming/django

[Django] CRUD Operation(2)

by 테리는당근을좋아해 2020. 6. 20.

목표

- CRUD Operation에서 Create

- 데이터베이스에 데이터 저장하기

 

데이터베이스에 데이터를 저장하는 방법을 구현해보자

 

 

새 페이지 생성

1) html 파일 생성

글을 작성할 수 있는 html 파일을 하나 생성

 

 

<form action="{% url 'create' %}">
    <input type="text" name="title">
    <input type="text" name="content">
    <input type="submit" value="작성하기">
</form>

 

input 태그의 name은 views.py에서 전달받은 값을 구별할 수 있는 속성이 된다.

 

 

2) views.py 메소드 정의

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

 

3) urls.py

path('new/', blog.views.new, name='new')

 

127.0.0.1:8000/new/

 

또한, index 페이지에서 새글을 쓸 수 있는 new 페이지로 이동할 수 있는 a 태그를 하나 추가하자

 

<a href="{% url 'new' %}">새 글쓰기</a>
{% for post in posts %}
    <h1>{{post.title}}</h1>
    <p>{{post.pub_date }}</p>
    <a href="{% url 'detail' post.id %}">자세히 보기</a>
    <br>
{% endfor %}

 

127.0.0.1:8000

 

지금까지 작업한 내용을 통해 Create를 위한 기초작업이 끝이났다.

이제 new 페이지에서 input 태그에 입력된 값을 데이터베이스에 저장하는 처리를 해주어야한다.

 

 

Create 함수 정의

from django.shortcuts import render, get_object_or_404, redirect
from django.utils import timezone

...

def create(request):
    # 빈 Post 객체를 하나 생성한다.
    post = Post()
    
    # new.html에서 name속성의 값이 title인 input 태그에 입력된 value를 post 객체의 title에 저장한다.
    post.title = request.GET['title']
    
    # new.html에서 name속성의 값이 content인 input 태그에 입력된 value를 post 객체의 content에 저장한다.
    post.content = request.GET['content']
    
    # django.utils에서 제공하는 timezone 메소드로 현재 시간을 post 객체의 pub_date에 저장한다.
    post.pub_date = timezone.datetime.now()
    
    # post 객체를 데이터베이스에 저장한다.
    post.save()

    # 저장에 대한 처리작업이 완료되면 '/detail/방금 저장한 post의 id/'로 redirect한다.
    return redirect('/detail/' + str(post.id))

1) redirect, timezone 메소드를 import 한다.

 

2) create 메소드 내에 먼저 빈 Post 객체를 하나 생성한다.

 

3) Post 객체 내에 title과 content에 new.html 파일의 각각에 대응하는 input태그로부터 넘겨받은 값을 저장한다.

 

4) timezone 메소드를 통해 현재 시간을 저장한다.

 

5) save() 메소드를 통해 데이터베이스 저장한다.

 

6) redirect 메소드를 사용해서 방금 작성한 post의 id값을 이용해 해당하는 detail.html로 넘어간다.

 

 

urls.py

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

 

 

 

한국시간으로 표시하기

settings.py에서 TIME_ZONE 을 한국 시간으로 변경

TIME_ZONE = 'Asia/Seoul'

 

'Web Programming > django' 카테고리의 다른 글

[Django] CRUD Operation(4)  (0) 2020.06.20
[Django] CRUD Operation(3)  (0) 2020.06.20
[Django] CRUD Operation(1)  (0) 2020.06.19
[Django] Model  (2) 2020.06.19
[Django] 클라이언트 요청 처리  (2) 2020.06.19

댓글