Chapter 3. 실전 프로그램 개발 — Blog 앱

새롭게 blog앱을 생성하고, 포스팅을 등록하고 조회하는 기능을 만들어봅니다.

blog 앱 생성 및 모델/마이그레이션

다음 순서로 진행합니다.

  • blog 앱 생성 및 settings.py 에 등록
  • blog.models.Post 모델을 작성하고 admin 에 등록
  • blog 앱에 대해서 마이그레이션을 수행하여, 데이터베이스에 반영

Post모델에 대해 다음 총 4가지 필드가 사용되었습니다.

  • models.CharField : 길이제한이 있는 문자열
  • models.TextField : 길이제한이 없는 문자열. 기본위젯으로 여러줄 문자열을 입력할 수 있는 textarea가 지정됩니다.
  • models.SlugField : Slug는 핵심 키워드 만을 조합해서 긴 제목을 간단하게 만드는 것을 뜻합니다. 검색에 용이한 URL을 만들기위해 많이 쓰입니다. SlugField는 CharField를 상속받았으며, slug (정규표현식 패턴 : ^[-a-zA-Z0–9_]+\Z)혹은 unicode_slug (정규표현식 : ^[-\w]+\Z)유효성검사 루틴이 적용된 필드입니다.
  • models.DateTimeField : 특정 날짜/시간

책에서는 Post 모델의 Meta 정보에 verbose_name, verbose_name_plural, db_table 정보가 추가로 더 등록이 되어있습니다. 이 설정은 디폴트값을 이용하셔도 무방합니다. ordering 은 기본정렬필드를 지정하는 것입니다. 다수 필드를 지정하여 1차정렬기준, 2차정렬기준 등을 설정할 수 있습니다. ‘-modify_date’ 로 지정하였으므로 modify_date 필드에 대해 내림차순 정렬이 기본 정렬이 됩니다. 이 정렬은 차후 QuerySet 의 order_by 를 통해 변경할 수 있습니다.

PostAdmin에서는 다음 4가지 옵션이 사용되었습니다.

  • list_display : admin 목록화면에서 출력될 필드를 지정합니다. 주로 관련 모델의 필드를 지정하며, 모델의 멤버함수 혹은 Admin 의 멤버함수를 지정할 수도 있습니다.
  • list_filter : admin 목록화면에서 필터링 옵션으로 주어질 필드를 지정합니다.
  • search_fields : 목록화면에서 검색에 쓰일 필드를 지정합니다. 이는 데이터베이스에서 ILIKE 쿼리로 수행됩니다.
  • prepopulated_fields : 생성/수정폼에서 javascript를 통해 지정필드로부터 값을 자동생성하여 채워줍니다.

URLConf 골격 만들기

현재 “프로젝트/urls.py” 에 있는 각 장고앱에 대한 URL 정의를 앱 별로 분기시켜봅시다. 이때 django.conf.urls.include 를 사용하며, url name 중복/충돌을 막기위해 namespace도 지정합니다.

장고앱별로 뷰/모델/템플릿/static 등이 다 나눠져있는데, URLConf만 따로 있는 것은 어울리지 않습니다. 뷰와 URLConf는 한쌍이므로, 앱 안에 같이 모아두는 것이 보다 재사용성높은 (Reusable) 장고앱이 될 것입니다.

장고 내 빌트인 CBV API 는 Built-in class based views API를 통해 확인하실 수 있습니다.

Generic display views는 다음 2가지입니다. 관련 링크의 API문서에 자세한 설명이 있으니, 꼭 열어보세요.

  • ListView : 지정 모델에 대한 전체 목록을 조회할 수도 있으며, get_queryset 멤버함수를 재정의하여, 특정조건의 목록만 조회할 수도 있습니다. paginate_by 옵션을 주어 페이징처리도 가능합니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_list.html” 입니다.
  • DetailView : 지정 모델에 대한 pk를 인자로 받으며, 지정 pk의 모델 인스턴스에 대한 Detail 내용을 보여줍니다. get_queryset 멤버함수를 재정의하여, QuerySet 조건을 엄격하게 지정할 수도 있습니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_detail.html” 입니다.

Generic date views는 다음 7가지 입니다. 관련 링크의 API문서에 자세한 설명이 있으니, 꼭 열어보세요.

  • ArchiveIndexView : 지정 날짜필드 역순으로 정렬된 목록을 보여줍니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_archive.html” 입니다.
  • YearArchiveView : 관련 URL Rule에서 year 인자를 받아, 지정 년도에 해당되는 목록을 보여줍니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_archive_year.html” 입니다. 템플릿에 previous/next year 값을 제공해줍니다.
  • MonthArchiveView : 관련 URL Rule 에서 year/month 인자를 받아, 지정 년/월에 해당되는 목록을 보여줍니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_archive_month.html” 입니다. 템플릿에 previous/next year/month 값을 제공해줍니다.
  • WeekArchiveView : 책에서 언급되지 않았습니다. 관련 URL Rule 에서 year/week 인자를 받아, 지정 년/주에 해당되는 목록을 보여줍니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_archive_week.html” 입니다. 템플릿에 previous/next year/week 값을 제공해줍니다.
  • DayArchiveView : 관련 URL Rule 에서 year/month/day 인자를 받아, 지정 년/월/일에 해당되는 목록을 보여줍니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_archive_day.html” 입니다. 템플릿에 previous/next year/month/day 값을 제공해줍니다.
  • TodayArchiveView : 오늘 날짜에 해당되는 목록을 보여줍니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_archive_day.html” 입니다.
  • DateDetailView : 특정 날짜에 해당되는 목록을 보여줍니다. 디폴트 템플릿경로는 “앱이름/모델명소문자_archive_date.html” 입니다.

3장의 주요내용을 모두 살펴봤습니다.

감사합니다.


파이썬/장고 질문은 http://facebook.com/groups/askdjango 를 통해 풀어가세요. 유튜브 채널에도 놀러오세요. ;)

도서 — 파이썬 웹프로그래밍 실전편 (요약)

한빛미디어 <파이썬 웹프로그래밍> 실전편에 대한 요약 및 부연설명

Chinseok Lee

Written by

도서 — 파이썬 웹프로그래밍 실전편 (요약)

한빛미디어 <파이썬 웹프로그래밍> 실전편에 대한 요약 및 부연설명