Static , Media 파일
- Static 파일 : 개발 리소스로써 정적인 파일(js, css, img etc..)을 의미
- Media 파일 : FileField/ImageField를 통해 저장한 모든 파일을 의미하며, DB필드에는 저장경로(문자열)를 저장하며 파일은 파일 스토리지에 저장된다.
Media 파일 수행 방식
1. HttpRequest.FILES를 통해 파일을 전달
2. 뷰 로직이나 폼 로직을 통해, 유효성 검증을 수행한다.
3. FileField/ImageField 필드에 "경로"를 저장한다.
4. settings.MEDIA_ROOT 경로에 파일을 저장한다.
Settings.py 에서 static, media 설정하기
project/settings.py
STATIC_URL = '/static/'
STATICFILES_DIR = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
project/urls.py
from django.contrib import admin
from django.urls import path, include
# 해당 모듈 추가
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('app/', include("app.urls")),
]
# 해당 코드 추가
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Model 에서 upload_to 옵션 사용하기
해당 옵션을 이용하여 media 폴더 안에 어떻에 파일이 저장될지 지정 할 수 있다.
App/models.py
from django.db import models
# Create your models here.
class Post(models.Model):
message = models.TextField()
# upload_to 값에는 media 폴더안에 정리하고픈 폴더 경로를 설정하면 된다.
# 만약에 시간 순서대로 폴더 만들어서 보관하고 싶다면 'app/post/%Y/%m/%d' 처럼 저장 할 수 있다.
photo = models.ImageField(blank=True, upload_to ='app/post')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f"<{self.pk}> {self.message}"
'FrameWork > Django' 카테고리의 다른 글
[Django] Model 객체 조회하기 (0) | 2023.02.08 |
---|---|
[Django] shell 사용하기 (0) | 2023.02.08 |
[Django] Admin을 이용하여 DB 관리 (0) | 2023.02.07 |
[Django] admin superuser 생성 방법 (0) | 2023.02.07 |
[Django] Model Field 종류와 옵션 (0) | 2023.02.07 |