관리 메뉴

Storage Gonie

45. (app3) Photo 모델 생성 / MEDIA_URL 설정 본문

웹개발/Django 웹서비스 개발(인프런)

45. (app3) Photo 모델 생성 / MEDIA_URL 설정

Storage Gonie 2019. 2. 22. 20:13
반응형

1. settings.py수정, 맨 아래에 두줄 추가.

MEDIA_URL = '/files/' # 업로드하는 과정을 처리하는 url지정.
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads') # 현재 프로젝트 경로에 uploads 폴더를 생성하여 이곳에 업로드한 파일을 저장하겠다는 것.

2. models.py에서 Photo 모델 및 user_path를 만들어주는 메소드 생성.

from django.db import models
from django.conf import settings
# Create your models here.

def user_path(instance, filename): # instance는 Photo 클래스의 객체, filename은 업로드할 파일의 파일이름
from random import choice # string으로 나온 결과에서 하나의 문자열만 뽑아냄
import string # 무작위 문자열을 뽑아내기 위한 용도
arr = [choice(string.ascii_letters) for _ in range(8)] # 무작위로 8글자를 뽑아줌
pid = ''.join(arr) # 파일 아이디생성
extension = filename.split('.')[-1] # 파일이름으로부터 확장자명가져오기
# ex) honux/asfqqwer.png
return '%s/%s.%s' % (instance.owner.username, pid, extension)

class Photo(models.Model):
image = models.ImageField(upload_to=user_path) # 어디에 업로드할지 지정할 수 있음.
owner = models.ForeignKey(settings.AUTH_USER_MODEL) # 하나의 사진은 한명의 사용자에게 속해야 하므로. 1:N의 관계
thumname_image = models.ImageField()
comment = models.CharField(max_length=255)
pub_date = models.DateTimeField(auto_now_add=True) # 사용자가 입력하지 않고 업로드 하는 순간 자동으로 세팅이 됨.

3. 가상환경에서 Pillow설치.

- "pip install Pillow"

- ImageField를 사용하려면 Pillow 모듈이 필요하다.


4. Photo모델 admin.py에 등록

from .models import Photo

admin.site.register(Photo)

5. DB테이블에 Photo등록

- "python manage.py makemigrations"

- "python manage.py migrate"


6. admin페이지에서 확인가능



7. 썸네일 이미지를 제외하고 Image, Owner, Comment를 입력한다. 그리고 저장을 누르면 필수항목인 썸네일 이미지를 선택하라고 하는데 이를 필수가 아닌 선택으로 수정.

- model.py의 Photo모델 정의부분에서 수정하면됨.

- 이후 "python manage.py makemigrations"

- "python manage.py migrate"

- 그런 뒤 다시 사진을 추가해보자.

thumnail_image = models.ImageField(blank=True)      # blank가 True이면 폼 입력시 꼭 입력하지 않아도 된다는 의미



8. uploads 폴더가 생성되고 그 밑에 ldgeao99폴더 그 밑에 사진이 저장된 것을 알 수 있다. 

9. admin페이지에서 이미지 객체 수정에서 링크를 눌러보면 접속되지 않는데 이를 가능하게 하자.

- 디버깅 할 때만 이를 가능하게 하고, 배포시에는 이를 비활성화 해야한다.

- mysite/urls.py에서 아래의 코드를 추가해준다.

- 그 다음엔 이미지의 링크를 클릭하면 사진으로 넘어감

from django.conf import settings
from django.conf.urls.static import static

# 첫번째 인자 : 어떤 URL을 정적으로 추가할래?, 두번쨰 인자 : 실제는 어디에 있는데?
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)


반응형
Comments