티스토리 뷰
이번 글에서는 저번 글에서 설계한 흐름에 따라 북마크 애플리케이션을 개발합니다.
2019/12/29 - [웹 프로그래밍/Django] - 3. 북마크 애플리케이션 설계
북마크 애플리케이션 개발
① 애플리케이션 뼈대 만들기
①-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() 메소드 참고 사이트
사진을 보면 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/
-
(?P\d+)
-(?P): 이 부분의 문자열에 또다른 정규표현식을 사용할건데
-\d+: '1개 이상의 숫자' 의 정규식 패턴과 일치한다면
-: pk라는 이름으로 해당 문자열을 저장할 것이다.
이런 방식으로 우리가 앞에서 설계했던 북마크 상세페이지의 url들 처럼 구조는 같고 값만 다른 형태의
url을 만들 수 있습니다.
나머지 과정은 다음 글에 이어서 작성하겠습니다.
참고 자료
- Django를 활용한 쉽고 빠른 웹 개발 파이썬 웹 프로그래밍
- https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/skeleton_website
'Django' 카테고리의 다른 글
[Django App 2-1] 북스토어 애플리케이션 개발 (0) | 2020.01.07 |
---|---|
[Django App 1-3] 북마크 애플리케이션 개발(2) (0) | 2020.01.01 |
[Django App 1-1] 북마크 애플리케이션 설계 (0) | 2019.12.29 |
[Django Basic 03] Django 프로젝트 생성(2) (0) | 2019.12.18 |
[Django Basic 02] Django 프로젝트 생성(1) (0) | 2019.12.17 |
- Total
- Today
- Yesterday
- Django 인스타그램
- MySQL
- Django 회원가입
- 북마크 어플리케이션
- java
- Django Instagram
- Django 컬렉션
- Django 프로젝트 생성
- Django 팔로우
- 파이썬
- python
- Django 로그아웃
- Django 로그인
- Django 좋아요
- Django 비밀번호 수정
- Django application
- 서점 어플리케이션
- Django 어플리케이션
- Django User
- Django 댓글
- Redis Cache
- Django
- query parameter
- Redis
- Django 북마크
- Django 회원 정보 수정
- Django 검색
- Django 업로드
- Django 해시태그
- 장고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |