티스토리 뷰

이번 글에서는 저번 글에서 설계한 흐름에 따라 북마크 애플리케이션을 개발합니다.

2019/12/29 - [웹 프로그래밍/Django] - 3. 북마크 애플리케이션 설계

 

3. 북마크 애플리케이션 설계

Django를 활용한 웹 개발에 좀 더 익숙해지기 위해 간단한 애플리케이션을 만들고자 합니다. 이번에 만들 애플리케이션은 북마크 애플리케이션으로 자주 사용하는 사이트를 등록하는 앱입니다. 간단한 로직을 사용..

chagokx2.tistory.com

 


 

북마크 애플리케이션 개발

① 애플리케이션 뼈대 만들기

①-1 애플리케이션 생성

다음의 명령으로 애플리케이션을 생성합니다.

(현재 위치가 manage.py가 포함되어 있는 디렉토리 위치(\prj_1st)인지 확인하기)

python manage.py startapp 애플리케이션 이름

이 명령으로 Django가 앱 디렉토리와 필요한 파일들을 생성해준 것을 확인할 수 있습니다.

 

①-2 애플리케이션 등록

프로젝트에 포함되어 있는 애플리케이션은 모두 settings.py에 등록되어야 프로젝트가 실행될 때

실행될 수 있습니다. 다음과 같이 settings.py 파일을 열어 중간에 있는 INSTALLED_APPS 리스트에

bookmark 애플리케이션을 추가합니다.

 

② Model 만들기

②-1 테이블 정의

models.py를 열어 이전에 설계한 대로 데이터베이스 테이블에 해당하는 모델을 정의합니다.

모델은 models.Model 클래스를 상속받아 한 테이블 당 하나의 클래스로서 정의해야 합니다.

또한 이전에 설계한 각 컬럼들은 Django에서 미리 정의된 필드 타입을 사용하여 정의합니다.

우리가 이전에 설계한 Bookmark 테이블을 models.py에 정의하면 다음과 같습니다.

<Bookmark 모델에서 사용된 필드 타입>

  • CharField: 작거나 중간 크기의 고정된 길이의 문자열을 정의할 때 사용

    ​ 데이터의 최대 길이(max_length)를 정해줘야 함

  • URLField: URL을 위한 CharField

def __str__(self):
    return self.name

Bookmark 클래스에서 정의된 이 메소드는 객체를 문자열로 표현할 때 쓰입니다.

특히, Admin 사이트에서 테이블의 개별 레코드를 보여주는데 사용됩니다.

  • str() 메소드 참고 사이트

https://riptutorial.com/ko/django/example/9825/%EB%AA%A8%EB%8D%B8%EC%9D%98-%EB%AC%B8%EC%9E%90%EC%97%B4-%ED%91%9C%ED%98%84-%EC%B6%94%EA%B0%80

 

Django - 모델의 문자열 표현 추가 | django Tutorial

django documentation: 모델의 문자열 표현 추가

riptutorial.com

사진을 보면 list_id 컬럼이 정의되지 않은 것을 볼 수 있습니다.

Django에서 모델을 정의할 때 사용자가 따로 PK 컬럼을 정의하지 않는다면 자동으로 id라는 컬럼을

만들어 줍니다. 이 컬럼은 PK 역할을 수행하는 integer 타입의 컬럼이며, 하나의 행이 만들어 질 때마다

자동으로 1씩 증가하는 Auto Increment 속성을 가집니다.

 

 

②-2 Admin 사이트에 등록

Django는 관리자가 models.py에 정의한 테이블과 테이블에 들어간 데이터들을 쉽게 보고 관리할 수

있도록 기본 사이트를 제공합니다. 이 사이트를 Admin 사이트라고 합니다.

따라서, models.py에 테이블을 정의하고 나면 이를 admin.py에 정의하여 Admin 사이트에 등록하는

과정을 진행해야 합니다.

 

admin.py을 열어 다음과 같이 작성합니다.

list_display 옵션을 따로 지정하지 않으면 각 object의 __str__() 값만 보여줍니다. 

 

따라서, list_display 옵션을 사용하여 admin 사이트에서 테이블이 보여지는 방식을 바꿉니다.

다음과 같이 ModelAdmin 클래스를 정의하여 출력하고 싶은 컬럼을 지정합니다.

  • admin.site.register(): BookmarkAdmin에 실제 DB Table인 Bookmark를 mapping하여 화면에

    ​ 출력할 컬럼이 어디에 존재하는지 등록

 

 

②-3 DB 변경사항 반영

Django는 다음 명령어를 통해 모델의 변경사항을 추적해서 DB 안의 기본 데이터 구조가 모델과

일치하도록 자동적으로 migrate하는 스크립트를 migrations 폴더 안에 생성합니다.

python manage.py makemigrations
python manage.py migrate

  • makemigrations: 프로젝트에 설치된 모든 어플리케이션에 대한 migration file 생성

    → 즉, models.py 안의 변경사항을 알아내어 이를 DB에 반영하기 위한 실행 쿼리 생성

  • migrate: migration들을 실제로 DB에 적용

 

 

②-4 Admin 사이트에서 테이블 확인

이제 지금까지 만든 Bookmark 테이블을 확인하고 데이터를 insert 하기 위해 admin 사이트에

들어갑니다.

먼저 테스트 서버를 실행시킨 후, 'http://127.0.0.1:8000/admin' 으로 접속합니다. 접속 후 나오는

로그인 화면에서 이전에 생성한 관리자 계정으로 로그인을 하면 다음과 같은 화면을 볼 수 있습니다.

Bookmark 테이블에 데이터를 추가하려면 Add 버튼을 클릭합니다.

 

 

이 화면에서 ADD BOOKMARK 버튼을 클릭하면

 

여기서 우리가 만들 Bookmark List 페이지에 보여줄 Bookmark들의 데이터를 입력합니다.

 

 

③ URLconf 정의

여기서 URLconf이란 url과 뷰들을 매핑해주는 urls.py 파일을 말합니다.

이번에는 이전에 설계했던 url들을 직접 urls.py에 정의해보려고 합니다.

urls.py을 열어 다음과 같이 코딩합니다.

from django.contrib import admin
# from django.urls import path

# Django의 내장함수를 import
from django.conf.urls import re_path

# 각 url에 매핑시킬 뷰들을 bookmark의 views.py에서 가져와 import
from bookmark.views import BookmarkListView, BookmarkDetailView


"""
re_path(regex, view, name): re_path()는 주로 세 개의 인자를 사용합니다.
                            regex는 정규식, view는 해당 url 패턴에 매핑시킬 뷰,
                            name은 해당 url 패턴에 붙일 이름을 의미합니다.
"""
urlpatterns = [
    # path('admin/', admin.site.urls),
    re_path(r'^admin/', admin.site.urls),

    """
    r'^bookmark/$'에 일치하는 url이 들어오면 BookmarkListView에 매핑할거고
    이 패턴의 이름은 list로 지정할 것이다는 의미
    """
    re_path(r'^bookmark/$', BookmarkListView, name='list'),
    re_path(r'^bookmark/(?P<pk>\d+)/$', BookmarkDetailView, name='detail'),
]

여기서 path() 대신 re_path()를 사용하는 이유는 re_path()는 정규식을 사용할 수 있어 좀 더 복잡한

url들을 호출할 수 있기 때문입니다.

  • regex(regular expression, 정규표현식)

    : 문자열 검색이나 치환 등을 간편하게 처리할 수 있으며 대부분의 개발 언어에서 지원

    -r': 뒤에 오는 문자열은 regex로 인식됨

    -^: 문자열의 시작

    -$: 문자열의 끝

    -이 외의 다른 정규식 표현은 이곳에 참고

    https://suwoni-codelab.com/django/2018/03/24/Django-Regular-expression/

 

Django 2.0 노트- 4. 정규표현식

Django에서 Url맵핑시 자주 사용되는 정규표현식에 대해 정리합니다.

suwoni-codelab.com

  • (?P\d+)

    -(?P): 이 부분의 문자열에 또다른 정규표현식을 사용할건데

    -\d+: '1개 이상의 숫자' 의 정규식 패턴과 일치한다면

    -: pk라는 이름으로 해당 문자열을 저장할 것이다.

이런 방식으로 우리가 앞에서 설계했던 북마크 상세페이지의 url들 처럼 구조는 같고 값만 다른 형태의

url을 만들 수 있습니다.

 

 

나머지 과정은 다음 글에 이어서 작성하겠습니다.

 


 

참고 자료

 

장고 튜토리얼 강좌 2 : 뼈대 사이트 만들기

이 두 번째 Django Tutorial은 당신이 어떻게 Web Site 의 "뼈대"를 만들 수 있는지 기초부터 보여주고, 계속 Django의 Site 에 특화된 설정, paths, models, views, and templates를 다루는데 도움이 될 것입니다.

developer.mozilla.org

 

Django 기본 02 - 파이썬 정규표현식, URLConf · 초보몽키의 개발공부로그

AskDjango 수업을 듣고 중요한 내용을 정리하였습니다.

wayhome25.github.io

댓글