완숙의 블로그

MEDIA_ROOT, MEDIA_URL 본문

Programing Language/Web_Django

MEDIA_ROOT, MEDIA_URL

완숙 2020. 1. 10. 15:34

media 파일 다루기

장고에서 미디어 파일을 다루려면, settings.py 에 추가적으로 파라미터를 설정해줘야 한다.

 

class User(AbstractUser):
    """ Custom User Model """

    
    avatar = models.ImageField(upload_to="avatar", blank=True)
    

일단 models.py에서 ImageField 로 설정을 해준 뒤에 admin 패널에서 파일을 추가하면,

그런데, 지금은 경로가 avatar 폴더 안에 있지만,

이건 설정을 해주었기 때문이고, 설정을 해주지 않게 되면, 가장 상위 폴더에 지저분하게 사진들이 업로드된다.

 

이 부분을 막고, 추가적으로 저 사진 경로를 클릭했을 때, 사진을 볼 수 있도록 만들어보자.

 

 

Media_root, Media_url

# 미디어 파일의 경로 설정
MEDIA_ROOT = os.path.join(BASE_DIR, "uploads")

# 앞에 /를 더하면 절대 경로로 바뀐다.
# 127.0.0.1:8000/media/room_photos/1.jpg
# 만약 /를 안 붙이면, 내가 이 파일에 접속할 때 상대경로로 URL이 생성된다. -> 지저분해진다.
# 127.0.0.1:8000/admin/rooms/photo/1/change/media/room_photos/1.jpg
# 이 URL로 접속하면, 위의 미디어 파일의 경로로 들어가도록 하는 것이다.
MEDIA_URL = "/media/"

위는, 미디어 파일이 들어올 때, 어떤 폴더에 저장할지 결정하는 부분이다.

 

밑은, 그 경로의 url을 정해주는 것이다. 정리하는 것이라 보면 된다.

 

이 작업을 하고나서 위의 사진 경로를 웹상에서 클릭하면,

media url 변경 전
media url 변경 후

요청된 url이 변경된 것을 알 수 있다.

 

 

 

 

 

Debug mode

장고를 기본적으로 시작하면 debug = True라고 되어있다.

이는 장고가 에러가 났을 때 개발자를 위해 에러 페이지를 띄워주는 것을 말한다.

 

개발 모드에서는 적극 사용하지만, 프로덕션 레벨에서는 이 기능을 꺼주어야 한다.

 

이 부분을 언급하는 이유는, media 파일은 서버에 올리지 않고 다른 방법으로 사용할 것이기 때문이다.

지금은 연습상 하는 것임을 미리 말해둔다.

 

 

 

URL setting

다시 돌아와서, 변경된 url로 요청했을 때 사진을 보내주면된다.

url에 대해 setting하기 위해서는 urls.py에 들어가야 한다.

 

그런데 이 부분에서는 지금 환경이 개발 모드이냐 아니냐에 따라서 작동하는  방식이  다르다.

따라서 우리는 이 부분을 확인할 수 있도록 settings.py를 import 해서 알아내는 방법을 사용하고자 한다.

 

from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path("admin/", admin.site.urls),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

이 작업을 할 때 우리는 static이라는 것을 가져와서 사용할 것인데,

정적 파일들의 url을 관리하는 함수이다. 접근한 url을 리턴하는 함수이다.

이 함수에 파라미터는 기본적으로 어떤 url로 접근할 것인지,

그리고 그곳으로 접근했을 때, media 파일의 경로는 어디인지를 넣어준다.

그럴 경우, 자동으로 접속한 url에 대한 파일을 가져와 보여줄 것이다.

Comments