간단한 북스토어 서비스
*기본적인 구성을 갖추는 단계를 거친 후부터 진행하겠다.
- 테이블 만들기
models.py 파일을 열어 이전에 구상하여 설계한 데이터베이스 테이블에 해당하는 모델을 정의한다.
모델은 models.Model 클래스를 상속받아 한 테이블 당 하나의 클래스로 정의해야 한다.
각각의 컬럼들은 Django에서 미리 정의된 필드 타입을 사용하여 정의해야 한다.
모델정의 참고 사이트: https://nukggul.tistory.com/17
[Django] 모델 - 1. Model Syntax
Django에서 모델은 아래와 같은 특징을 가지고 있습니다. 각각의 모델은 파이썬 클래스로 표현되며, django.db.models.Model 클래스의 서브클래스입니다. 모델 클래스의 어트리뷰트로 데이터베이스의 필드(컬럼)을..
nukggul.tistory.com
모델필드 타입 참고 사이트 : https://revidream.tistory.com/18
Django 모델[Model] 생성, field의 종류
# Django의 모델(Model) Django 에서 모델은 데이터를 데이터베이스에 저장하고 데이터를 가공하는 작업을 하며 데이터 서비스를 제공하는 기능을 담당한다. Django의 Model은 각각의 Django App 안에 기본적으로..
revidream.tistory.com
def __str__(self):
return self.name
Bookmark 클래스에서 정의된 이 메소드는 객체를 문자열로 표현할 때 쓰인다
특히, Admin 사이트에서 테이블의 개별 레코드를 보여주는데 사용된다.
앞서 살펴보면, list_id 컬럼이 개별적으로 정의되지 않은 것을 확인할 수 있다.
Django에서 모델을 정의할 때 사용자가 따로 PK 컬럼을 따로 정의하지 않는다면 자동으로 id라는 컬럼을
만들어 준다. 이 컬럼은 PK 역할을 수행하는 integer 타입의 컬럼이며, 하나의 행이 추가될 때마다자동으로 1씩 증가하는 Auto Increment 속성을 가지며 아래와 같이 보이지 않는 코드가 자동 생성되는 것이다.
list_id = models.AutoField(primary_key=True)
- Admin 테이블 등록
models.py에 테이블을 정의하고 나면 이를 admin.py에 정의하여 Admin 사이트에 등록하는 과정으로 넘어간다.
list_display 옵션을 사용하여 admin 사이트에서 테이블이 보여지는 방식을 바꿀 수 있다. 다음과 같이 ModelAdmin 클래스를 정의하여 admin 사이트에서 출력되는 컬럼을 선택할 수 있다.
- DataBase 변경사항
Django는 다음 명령어를 통해 모델의 변경사항을 추적해서 DB 안의 기본 데이터 구조가 모델과
일치하도록 자동적으로 migrate하는 스크립트를 migrations 폴더 안에 생성한다.
*변경사항이 있을 때마다 다음 명령어를 실행시켜줘야 함.
python manage.py makemigrations
python manage.py migrate
- 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에 매핑시킬 뷰들을 bookstore의 views.py에서 가져와 import
from bookstore.views import BookstoreListView, BookstoreDetailView
"""
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'^bookstore/$'에 일치하는 url이 들어오면 BookmarkListView에 매핑할거고
이 패턴의 이름은 list로 지정할 것이다는 의미
"""
re_path(r'^bookstore/$', BookstoreListView, name='list'),
re_path(r'^bookstore/(?P<pk>[d]\d+)/$', BookstoreDetailView, name='detail'),
]
path() 대신 re_path()를 사용하는 이유는 re_path()는 정규식을 사용할 수 있어 좀 더 복잡한url들을 호출할 수 있기 때문이다.
정규표현식 참고 사이트 : https://wayhome25.github.io/django/2017/03/18/django-ep2-regx/
Django 기본 02 - 파이썬 정규표현식, URLConf · 초보몽키의 개발공부로그
AskDjango 수업을 듣고 중요한 내용을 정리하였습니다.
wayhome25.github.io
- Template 구성
실제 우리에게 보여지는 북스토어 리스트 페이지와 디테일 페이지를 구성하기 위해 작업 중인 애플리케이션 디렉토리 하위에 템플릿 디렉토리를 생성한다. 각 페이지 별로 템플릿 파일이 하나씩 필요하므로 이들을 한 곳에 모아두기 위한 템플릿 디렉토리가 별도로 필요하기 때문이다.
아래와 같이 생성한 templates 디렉토리 안에 각각 북스토어 리스트 페이지와 디테일 페이지를 html 파일로 작성한다.
- Bookstore List 화면
- Bookstore Detail 화면