: 애플리케이션 내에서 변하지 않는 파일들
: CSS, JavaScript, 이미지 파일 등
: 사용자에게 직접 제공되는 파일들
# settings.py 설정
# 정적 파일 URL
STATIC_URL = '/static/'
# 정적 파일 경로 (프로젝트 전역)
STATICFILES_DIRS = [
BASE_DIR / "static",
]
# 정적 파일이 모이는 경로 (collectstatic 명령으로 모음)
STATIC_ROOT = BASE_DIR / "staticfiles"
<!-- 템플릿에서 사용 -->
{% load static %}
<img src="{% static 'images/logo.png' %}" alt="Logo">
: 사용자가 업로드하는 파일들
: 프로필 사진, 첨부파일 등
: 데이터베이스에 저장되지 않고 서버의 특정 폴더에 저장 (media/uploads)
# settings.py 설정
# 미디어 파일 URL
MEDIA_URL = '/media/'
# 미디어 파일 저장 경로
MEDIA_ROOT = BASE_DIR / "media"
# models.py 정의
from django.db import models
class UserProfile(models.Model):
name = models.CharField(max_length=100)
profile_picture = models.ImageField(upload_to='profiles/')
<!-- 템플릿에서 사용 -->
{% if user.profile_picture %}
<img src="{{ user.profile_picture.url }}" alt="Profile">
{% endif %}
# urls.py
# 개발 서버에서 미디어 파일을 직접 서빙하려면 아래 코드를 추가
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# 기존 URL 패턴들
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

TIME_ZONE = "Asia/Seoul"
USE_TZ = True
Django에서 시간대(Timezone)을 설정하는 부분이다.
: Django 애플리케이션이 기본적으로 사용할 시간대를 지정
: "Asia/Seoul"는 한국 표준시(KST, UTC+9)를 의미
: 게시글 작성 시간, 댓글 작성 시간 등 모든 시간 관련 데이터가 Asia/Seoul 시간대를 기준으로 저장
: 로컬 시간을 기준으로 하여 표시하므로, 한국 사용자에게 익숙한 시간을 보여줌
: 시간대 목록은 pytz 라이브러리 기반이며 Asia/Seoul 외에도 "UTC", "America/New_York" 등
: Django가 시간 정보를 UTC로 저장할지 여부
: USE_TZ = True이면 모든 시간 데이터가 UTC로 저장
: 화면에 표시할 때는 TIME_ZONE 설정에 따라 변환
따라서 예시로 보여준 TIME_ZONE과 USE_TZ는 서버엔 UTC로 저장하고 한국 시간으로 표시하는 것을 의미한다.
: 외래키(Foreign Key)를 설정할 때 사용하는 모델 필드
: 한 테이블이 다른 테이블을 참조할 때 사용
: 1:N 관계를 설정할 때 주로 사용
: 관계형 데이터베이스에서 부모 테이블의 기본 키를 자식 테이블에 저장하는 방식
models.ForeignKey(
to, # 참조할 모델 (예: User)
on_delete, # 부모 객체 삭제 시 동작
related_name=None, # 역참조 이름
blank=False, # 폼에서 빈 값 허용 여부
null=False # DB에서 Null 값 허용 여부
)
from django.db import models
class User(models.Model):
username = models.CharField(max_length=50)
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
content = models.TextField()
: 이미지 파일을 저장하는 필드
: 주로 프로필 사진, 상품 이미지, 게시글 첨부 이미지 등에서 사용
: PIL 또는 Pillow 라이브러리 필요
: 파일 경로를 설정하여 서버에 이미지 저장
models.ImageField(
upload_to=None, # 파일이 저장될 경로
height_field=None, # 이미지 높이 저장 필드
width_field=None, # 이미지 너비 저장 필드
max_length=100 # 파일 경로 최대 길이
)
from django.db import models
class UserProfile(models.Model):
username = models.CharField(max_length=50)
profile_picture = models.ImageField(upload_to='profiles/', blank=True, null=True)
def __str__(self):
return self.username
: 로직 처리
: Django 템플릿에서 로직을 수행할 때 사용하는 구문
: 제어구조, 반복문, 조건문, 주석, 템플릿 상속 등을 처리할 때 사용
: {% %} 안에 명령어를 작성하여 처리

: 데이터 출력
: 파이썬 변수를 HTML에 출력할 때 사용
: 컨텍스트(Context)를 통해 뷰에서 전달된 데이터를 출력
: {{ }} 안에 변수를 넣어서 사용
: 데이터 변환
: 변수 값을 가공하거나 변환할 때 사용
: 파이프( | ) 뒤에 필터 이름을 작성하여 사용
: 여러 필터를 연속해서 사용 가능

Django에서 모델의 Manager는 데이터베이스 쿼리를 처리하는데 사용되는 인터페이스이다.
모델 클래스와 데이터베이스 간 데이터 조회와 조작을 담당하며 일반적으로 "모델클래스.objects"를 통해 접근한다.
모델의 데이터를 검색 / 추가 / 수정 / 삭제할 수 있는 데이터베이스 인터페이스이다.
모델이 생성될 때마다 기본적으로 하나의 Manager가 자동으로 추가되며
기본 이름은 objects이지만 커스텀해서 여러 Manager를 만들 수 있다.
