240409 백엔드위키 작성

송용진·2024년 4월 9일

URLconf?
URL과 뷰(View) 간의 매핑을 정의하는 파이썬 모듈 또는 클래스의 집합
애플리케이션의 URL 구조를 정의하고
클라이언트의 요청이 들어왔을 때
어떤 뷰 함수 또는 클래스로 요청을 보낼지 결정

  1. Blog 앱 확장 - Tag 달기
    ...
    각 포스트마다 태그를 달 수 있는 기능
    ...
    가장 많이 사용하는 django-taggit 패키지
    ...
    템플릿 태그 기능 및 태그 클라우드 기능이 추가된 django-taggit-templatetags2 패키지
    ...
    태그 클라우드 기능?
    태그 클라우드는 웹 페이지에서 태그들을 시각적으로 보여주는 방식으로,
    각 태그의 크기는 해당 태그가 사용된 빈도나 중요도에 따라 다르게 표시됩니다.
    이를 통해 사용자가 인기 있는 태그를 빠르게 식별하고 탐색할 수 있습니다.

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객체란?
데이터베이스 쿼리를 조작하고
복잡한 조건을 만들기 위해 사용되는 파이썬 클래스

profile
개발자

0개의 댓글