노래하듯 이야기하고, 춤추듯 정복하라.

Portfolio App 생성 & field.py 코딩 _Django 본문

프로젝트/Yes Interior

Portfolio App 생성 & field.py 코딩 _Django

hyeoke 2017. 10. 31. 23:06

#Portfolio App 개발


우선 장고는 각 주요 기능별로 애플리케이션을 만들어 개발/관리가 가능하다. 'Yes Interior' 웹 페이지의 핵심기능인 Portfolio앱을 첫 번째로 만들었다. 관리자(사업 주)가 공사를 진행하는 과정, 완료 모습 등의 내용을 사진과 글로 포스팅하여 포트폴리오 형식으로 정리할 수 있는 기능이다. 


관리자가 올린 이미지를 원본크기와 썸네일크기로 저장하여 보여줄 수 있는 커스텀 필드를 field.py파일을 생성하여 코딩했다.


- field.py (ThumbnailImageFieldFile, ThumbnailImageField)

def _add_thumb(s):
    parts = s.split(".") # 파일명을 '.'을 기준으로 splite함
    parts.insert(-1, "thumb") # split된 조각 맨 뒤에 'thumb'를 삽입
    if parts[-1].lower() not in ['jpeg', 'jpg']: # 소문자로 변환한 문자열 맨끝이 []안의 확장자가 아닐 시
        parts[-1] = 'jpg' # .jpg로 변환함
    return ".".join(parts) # split된 parts를 다시 join함

class ThumbnailImageFieldFile(ImageFieldFile):
    def _get_thumb_path(self):
        return _add_thumb(self.path)
    thumb_path = property(_get_thumb_path)

    def _get_thumb_url(self):
        return _add_thumb(self.url)
    thumb_url = property(_get_thumb_url)

    def save(self, name, content, save=True):
        super(ThumbnailImageFieldFile,  self).save(name, content, save)
        img = Image.open(self.path)

        size = (128)
        img.thumbnail(size, Image.ANTIALIAS)
        background = Image.new('RGBA', size, (255, 255, 255, 0))
        background.paste(img, (int((size[0]-img.size[0])/2), int((size[1]-img.size[1])/2)))
        background.save(self.thumb_path, 'png')

        def delet(self, save=True):
            if os.path.exists(self.thumb_path):
                os.remove(self.thumb_path)
            super(ThumbnailImageFieldFile, self).delete(save)

class ThumbnailImageField(ImageField):
    attr_class = ThumbnailImageFieldFile

    def __init__(self, thumb_width=128, thumb_height=128, *args, **kwargs):
        self.thumb_width = thumb_width
        self.thumb_height = thumb_height
        super(ThumbnailImageField, self).__init__(*args, **kwargs)


#setting.py에 STATICFILES_DIR을 설정하고 static폴더를 생성하기


css와 js코드를 장고에서 사용할 수 있도록 setting.py에 static_dir을 설정하고, 기존에 개발해 놓았던 front-end코드를 사용하여 메인화면(홈) template 개발을 진행했다. 


* 주의할점 -> static_dir과 함께 media_root도 함께 설정해주어야 한다.

STATIC_URL = '/static/'
# (추가) STATICFILES_DIRS
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

MEDIA_URL = '/media/'
# (추가) MEDIA
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')


- TemplateView를 상속받는 MainPageView(제네릭 뷰) 생성

from django.views.generic.base import TemplateView

class MainPageView(TemplateView):
    template_name = 'main.html'

- url 디자인

- home.html 개발 


#메인 화면


#static폴더와 templates폴더 





Comments