URLconf?
URL과 뷰(View) 간의 매핑을 정의하는 파이썬 모듈 또는 클래스의 집합
애플리케이션의 URL 구조를 정의하고
클라이언트의 요청이 들어왔을 때
어떤 뷰 함수 또는 클래스로 요청을 보낼지 결정
6.1 애플리케이션 설계하기
...
블로그의 각 포스트마다 태그를 보여주고
해당 태그를 클릭하는 경우,
그 태그를 가진 모든 포스트 리스트를 보여줌
태그만 모아서 보여주는 태그 클라우드 기능
...
6.1.1 화면 UI 설계
6.1.2 테이블 설계
6.1.3 URL 설계
6.1.4 작업/코딩 순서
6.2 개발 코딩하기
6.2.1 뼈대 만들기
프로젝트에 포함되는 애플리케이션들은 모두 설정 파일에 등록되어야 함
django-taggit, django-taggit-templatetags2 패키지도 settings.py 파일에 애플리케이션으로 등록
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bookmark.apps.BookmarkConfig',
'blog',
'taggit.apps.TaggitAppConfig', # 추가
'taggit_templatetags2', # 추가
]
TAGGIT_CASE_INSENSITIVE=True # 추가
TAGGIT_LIMIT=50 # 추가
[설정 파일에 tagging 앱 등록]
TAGGIT_LIMIT 항목은 태그 클라우드에 나타나는 태그의 최대 개수를 지정
6.2.2 모델 코딩하기
blog>models.py
from django.db import models
from django.urls import reverse
from taggit.managers import TaggableManager # 추가
# Create your models here.
# id, title, slug, description, content, create_dt, modify_dt
class Post(models.Model):
title = models.CharField(verbose_name='TITLE', max_length=50)
slug = models.SlugField(verbose_name="SLUG", unique=True, allow_unicode=True, help_text="one word for title alias.")
description = models.CharField("DESCRIPTION", max_length=100, blank=True, help_text="simple text")
content = models.TextField("CONTENT")
create_dt = models.DateTimeField("CREATE DATE", auto_now_add=True)
modify_dt = models.DateTimeField("MODIFY DATE", auto_now=True)
tags = TaggableManager(blank=True) # 추가
Taggit은 Django 프로젝트에서
태그 시스템을 구현하기 위한 편리한 라이브러리
TaggableManager는
Django 모델에 태그 기능을 추가하기 위한
Taggit의 핵심 클래스 중 하나
TaggableManager를 사용하면
모델의 각 인스턴스에 대해 다음과 같은 작업을 수행할 수 있음
1.태그 추가 및 제거
instance.tags.add('tag1', 'tag2'), instance.tags.remove('tag1')와 같이 태그를 추가하거나 제거할 수 있음
2.모든 태그 가져오기
instance.tags.all()을 통해
해당 모델 인스턴스에 연결된 모든 태그를 가져올 수 있음
3.태그에 따른 필터링
MyModel.objects.filter(tags__name='tag1')과 같이
특정 태그가 지정된 인스턴스를 필터링할 수 있음
tags 컬럼을 TaggableManager로 정의
blank = True이므로
tags 값이 없어도 됨
TaggableManager는 ManyToManyField 및 models.Manager 역할을 동시에 하고 있음
ManyToManyField 역할
TaggableManager는 Many-to-Many 관계를 나타내는
Django의 ManyToManyField와 비슷한 역할
즉, 모델 인스턴스와 태그 사이에 다대다 관계를 설정하고 관리하는 데 사용됨
모델 인스턴스는 여러 개의 태그를 가질 수 있고,
각 태그는 여러 개의 모델 인스턴스에 속할 수 있음
models.Manager 역할
TaggableManager는
Django의 기본 모델 매니저인 models.Manager와 유사한 역할
즉, 데이터베이스 쿼리를 수행하고
모델 인스턴스를 관리하는 메서드를 제공함
TaggableManager를 사용하여 태그를 관리하고 조회하는 데 사용됨
TaggableManager는
ManyToManyField와 models.Manager의 기능을 모두 결합하여,
태그와 모델 간의 관계를 쉽게 설정하고
데이터베이스에서 태그를 관리할 수 있도록 해줌
TaggableManager의 정의
7장
8장
Q객체란?
데이터베이스 쿼리를 조작하고
복잡한 조건을 만들기 위해 사용되는 파이썬 클래스