본문 바로가기

Web Programming/Django

백엔드_CRUD 실습 1

오늘 해볼 실습의 내용은 크게 3가지 이다.

 

1. Models.py 를 활용해 우리가 웹 서버에서 관리할 데이터의 양식 정하기

2. Admin 페이지를 통해 원하는 데이터를 보다 쉽게 관리하기

3. Admin 페이지에서 관리중인 데이터를 보기(CRUD 중 R에 해당하는 부분)

 

실습에 앞서, django를 사용할 기본적인 세팅을 준비한다.

 

가상환경 만들기 - 가상환경 동작시키기 - 장고 설치하기 - 프로젝트 만들기 - 앱 만들기 - 프로젝트와 앱 연결하기

 

1) 가상환경 만들기 & 동작시키기 

$ python -m venv myvenv # myvenv 이름으로 가상환경 만들기
$ source myvenv/Scripts/Activate # 가상환경 동작시키기

2) 장고 설치하기

$ pip install django # 장고 설치하기

3) 프로젝트 & 앱 만들기

$ django-admin startproject blogProject # blogProject 이름으로 장고 프로젝트 만들기
$ cd blogProject # 현재 디렉토리를 이동해서 blogProject 내부로 들어옵니다
$ python manage.py startapp blog # blog 라는 app을 설치합니다

4) 프로젝트와 앱 연결하기

# blogProject/blogProject/settings.py

INSTALLED_APPS = [
    ...,
    'blog.apps.BlogConfig', # blog App 연결하기
]

 

1. Models.py 를 활용해 우리가 웹 서버에서 관리할 데이터의 양식 정하기

다음으로 이제, Models.py을 통해 우리가 웹 서버에 관리할 데이터의 양식을 지정해보자.

# blogProject/blog/models.py

class Blog(models.Model): # Blog 라는 이름의 객체 틀(Model) 생성
    title = models.CharField(max_length=200) # title 라는 최대 200 글자의 문자 데이터 저장
    pub_date = models.DateTimeField('date published') # pub_date 라는 날짜 시간 데이터 저장
    body = models.TextField() # body 라는 줄글 문자 저장

    # 이 객체를 가르키는 말을 title로 정하겠다
    def __str__(self):
        return self.title

다음, 이 데이터 양식이 만들어졌다고 장고에게 알려주어야 한다.

# 장고에게 알려줄 때 파일로 알려준다
$ python manage.py makemigrations # 장고에게 알려줄 파일 생성
$ python manage.py migrate # 장고에게 파일을 통해 알려주기

이렇게 되면 우리가 다룰 데이터의 양식이 성공적으로 장고에게 알려지게 된다.

 

2. Admin 페이지를 통해 원하는 데이터를 보다 쉽게 관리하기

다음, Admin 페이지를 활용하기 위해, 다음의 명령어를 통해 관리자 계정을 만들어준다.

(주의할 점은 비밀번호 입력시 아무 입력도 안되는 것처럼 화면에 변화가 없을 텐데 그 순간에도 입력이 되고 있는 것)

(따라서 입력 후 엔터를 치면 자동으로 처리가 되므로 주의)

 

$ python manage.py createsuperuser # 관리자 계정만들기

그리고 우리의 서버 주소에 /admin 을 붙여서 접속하면 다음과 같은 admin 관리자 페이지가 뜬다.

ex) localhost:8000/admin

여기에 우리가 방금 만들었던 관리자 계정의 이름과 비밀번호를 입력하여 들어가서 데이터를 관리할 수 있는데, 이 때 우리가 만들었던 model을 admin site에 등록을 해주어야 확인을 할 수 있다.

 

# blogProject/blog/admin.py

from .models import Blog
admin.site.register(Blog)

그 후에 자유롭게 관리자 계정에서 blog 객체를 만들어 활용할 수 있다.

 

3. Admin 페이지에서 관리중인 데이터를 보기(CRUD 중 R에 해당하는 부분)

장고의 개발 패턴은 기본적으로 MTV라고 했으니 그에 맞게 하나씩 접근하여 개발한다.

 

1) 먼저 Template 부분이다

우리가 관리 중인 데이터를 웹 페이지에 띄우기 위해서 먼저 blogProject/blog/ 의 위치에 templates 라는 새 폴더를 만들어 준다. 그리고 해당 위치에 home.html 파일과 detail.html 파일을 만들어준다.

 

# blogProject/blog/templates/home.html

<header>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
</header>

<body>
    {% comment %} 부트스트랩을 활용하여 손쉽게 만들기 {% endcomment %}
    <div class="container">
        <table class="table">
            <thead class="thead-dark">
                <tr>
                <th scope="col">#</th>
                <th scope="col">Title</th>
                <th scope="col" style="width:20%"">Date</th>
                </tr>
            </thead>

            <tbody>
            {% comment %} 파이썬 문법을 사용해주기 위해서는 {% %} 기호 사용 {% endcomment %}
            {% comment %} for 문 반복문을 통해 view 에서 넘겨준 객체를 사용한다 {% endcomment %}
            {% for blog in blogs.all %}
                <tr>
                {% comment %} 객체 안의 데이터에 접근하기 위해서는 '.' 을 활용한다 {% endcomment %}
                <th scope="row">{{blog.id}}</th>
                <td><a href="{%url 'detail' blog.id%}">{{blog.title}}</a></td>
                <td>{{blog.pub_date}}</td>
                </tr>
            {% endfor %}
            </tbody>
        </table>
    </div>
</body>
# blogProject/blog/templates/detail.html

<header>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
</header>

<body>
    <div class="container">
        <h1> {{blog.title}} </h1>
        <p> {{blog.pub_date}} </p>
        <p> {{blog.body}} </p>
        <br><br>

        <a href="{%url 'home'%}">HOME</a>
    </div>
</body>

2) 다음 view 이다.

# blogProject/blog/views.py

from django.shortcuts import render, get_object_or_404
from .models import Blog

# Create your views here.
def home(request):
    blogs = Blog.objects # 객체 묶음 가져오기
    return render(request, 'home.html', {'blogs':blogs})
    # render라는 함수를 통해 페이지를 띄워줄 건데, home.html 파일을 띄워줄 것이고 
    # 이 때, blogs 객체도 함께 넘겨주도록 하겠다.

def detail(request, blog_id) : 
    blog_detail = get_object_or_404(Blog, pk= blog_id) # 특정 객체 가져오기(없으면 404 에러)
    return render(request, 'detail.html', {'blog':blog_detail})
    # render라는 함수를 통해 페이지를 띄워줄 건데, home.html 파일을 띄워줄 것이고 
    # 이 때, blog 객체도 함께 넘겨주도록 하겠다.

3) 마지막으로 url 이다.

# blogProject/blogProject/urls.py

from django.contrib import admin
from django.urls import path
import blog.views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', blog.views.home, name='home'),
    path('blog/<int:blog_id>', blog.views.detail, name="detail"),
]

 

이 까지 작성을 하면 http://127.0.0.1/admin 페이지에서 만든 객체를

http://127.0.0.1 페이지에서 확인을 할 수 있다.

 

데이터의 흐름을 정리하자면

1) 우리가 http://127.0.0.1 url을 입력하면 urls.py 에서 해당 url을 보고 path 함수를 통해 blog.views.home 함수를 호출한다 (url -> V)

2) blog.views.home 함수에서는 render를 통해 home.html 웹 페이지를 객체와 함께 띄워준다 ( V, M -> T)

 

다음과 같은 흐름으로 웹에 정보를 요청하고 주고 받게 되는 것이다.

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

백엔드_CRUD 실습 3  (0) 2019.05.13
백엔드_CRUD 실습 2  (4) 2019.05.10
AWS_Django 프로젝트 배포하기  (0) 2019.03.05
PostgreSQL DB Django 프로젝트에서 사용하기  (0) 2019.03.05
App 재사용(패키징)  (0) 2019.03.05