Django - Basic - 10에서 Model을 정의해줬습니다.
이제 그 Model을 가지고 실제로 DB에 data들을 저장하고 읽어보겠습니다.

1. Database에 data 저장하기

Django Shell을 실행합니다.

$ python manage.py shell

Django Shell을 이용하면 shell에서 바로 Django 명령어를 사용해서 data를 다룰 수 있습니다.

shell을 이용해 Post라는 Model의 record 하나를 만들어 보겠습니다.

> from second.models import Post
> post = Post.objects.create(title='this is title', content='this is content')
> post.save()

위와 같은 과정을 반복해 record를 7개까지 만들어보겠습니다.

> posts = Post.objects.all()
> posts
> <QuerySet [<Post: Post object (1)>, <Post: Post object (2)>, <Post: Post object (3)>, <Post: Post object (4)>, <Post: Post object (5)>, <Post: Post object (6)>, <Post: Post object (7)>]>

QuerySet이란 개념이 나왔는데 이는 지금 설명하지 않고 넘어가겠습니다.
중요한 것은 배열처럼 접근이 가능하다는 것입니다.

그러므로 다음과 같이 각 record의 정보를 확인할 수 있습니다.

> posts[0].title
> 'this is title'

이렇게 DB에 저장한 data를 가지고 무언가 일을 해보겠습니다.

2.

#second/views.py
from django.shortcuts import render
from second.models import Post


def list(request):
    context = {
        'items': Post.objects.all()
    }
    return render(request, 'second/list.html', context)
#second/templates/second/list.html

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Second</title>
</head>
<body>
    {% for item in items %}
    <div>
        <h4>{{ item.title }}</h4>
        <p>
            {{ item.content }}
        </p>
    </div>
    {% endfor %}
</body>
</html>

views.py에서 Post Model의 모든 record들을 받아서 items이라는 key에 저장했습니다. 그리고 list.html에 이 정보를 같이 넘겨줬습니다.

이제 list.html을 보면 items에 있는 각 record들에 관해 for문을 돌리고

<h4>태그에는 title에 담겨있는 필드를
<p>태그에는 content에 담겨있는 필드를 넣어줍니다.

마지막으로 url mapping을 해줍니다.

#second/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('list/', views.list, name='list')
]       

이제 runserver를 해서 결과를 보겠습니다.

스크린샷, 2019-10-20 20-28-58.png


구현한 화면은 매우 단순하지만
Model을 정의하고
record를 생성하고
record를 읽어서 화면에 어떻게 보이게 할지 결정했습니다.