django-admin startproject
명령어를 통해 생성한 프로젝트는 메시지 기능을 활성화하는데 필요한 모든 설정이 이미 settings.py
에 포함이 되어있다.INSTALLED_APPS = [
'django.contrib.messages',
# ...
]
MIDDLEWARE = [
'django.contrib.messages.middleware.MessageMiddleware',
# ...
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'templates', 'pages',)],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
settings.py
에 보면 INSTALLED_APPS
와 MIDDLEWARE
에 메시지 프레임워크 기능에 대한 부분이 들어있는 것을 볼 수 있다.TEMPLATES
설정에 정의된 DjangoTemplates 백엔드의 context_processors 옵션에는 'django.contrib.messages.context_processors.messages'
이 포함되어 있다.settings.py
에서 위와 같이 메시지를 나타내는 부분들만 제거를 하고 사용하면 된다.django.contrib.messages
에 3가지 내장 스토리지 클래스를 제공한다.①. 클래스
storage.session.SessionStorage
②. 클래스
storage.cookie.CookieStorage
③. 클래스
storage.fallback.FallbackStorage
Constant | Purpose |
---|---|
DEBUG | 서비스 배포에서 무시(혹은 제거)되는 개발 관련 메시지 |
INFO | 사용자를 위한 정보 메시지 |
SUCCESS | "귀하의 프로필이 성공적으로 업데이트 되었습니다"와 같이 성공적으로 동작이 이루어졌을 때 |
WARNING | 오류가 발생하지 않았지만 아마도 발생할 수 있음 |
ERROR | 작업을 성공하지 못했거나 다른 오류가 발생 |
Level Constant | Tag |
---|---|
DEBUG | debug |
INFO | info |
SUCCESS | success |
WARNING | warning |
ERROR | error |
from django.contrib.messages import constants as messages
MESSAGE_TAGS = {
messages.INFO: "",
50: "critical",
}
from django.contrib import messages
messages.add_message(request, messages.INFO, "Hello world.")
messages.debug(request, "%s SQL statements were executed." % count)
messages.info(request, "Three credits remain in your account.")
messages.success(request, "Profile details updated.")
messages.warning(request, "Your account expires in three days.")
messages.error(request, "Document deleted.")
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
참고자료 - Django 공식문서 The messages framework
django.views.static.serve()
뷰를 사용하여 MEDIA_ROOT에서 사용자가 업로드한 미디어 파일을 제공할 수 있지만 이는 적합하지 않다. 예를 들어 MEDIA_URL이 /media/로 정의된 경우 urls.py
에 다음과 같은 코드를 추가하면 된다.urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# gettext_lazy를 매 선택지마다 쓰는 불편함을 피하기 위해 alias(별칭)을 사용
from django.utils.translation import gettext_lazy as _
class Student(models.Model):
class YearInSchool(models.TextChoices):
FRESHMAN = "FR", _("Freshman")
SOPHOMORE = "SO", _("Sophomore")
JUNIOR = "JR", _("Junior")
SENIOR = "SR", _("Senior")
GRADUATE = "GR", _("Graduate")
year_in_school = models.CharField(max_length=2, choices=YearInSchool,default=YearInSchool.FRESHMAN)
Django Model Fields Reference - Choice Example
할 일(Task) - field name
체크리스트(ChecklistItem) - field name
from django.db import models
from django.utils.translation import gettext_lazy as _ # Django의 다국어 기능 지원
# Create your models here.
class Task(models.Model):
class TaskType(models.TextChoices):
JOB = 'JOB', _('업무')
HEALTH = 'HEALTH', _('건강')
SOCIAL = 'SOCIAL', _('사회')
title = models.CharField(max_length=50, null=False)
type = models.CharField(choices=TaskType.choices, max_length=10, default=TaskType.JOB)
due = models.DateTimeField(null=False)
created_at = models.DateTimeField(null=False)
class ChecklistItem(models.Model):
task = models.ForeignKey(Task, on_delete=models.CASCADE)
content = models.CharField(max_length=100, null=False)
checked = models.BooleanField(null=False, default=False)
created_at = models.DateTimeField(auto_now_add=True, null=False)