jc.jang

이미지 파일만 입력 받기 본문

프로젝트/가짜 뉴스 생성기

이미지 파일만 입력 받기

jangstory 2019. 10. 8. 23:36

에러내용

  • 이미지가 아닌 파일 입력 시 에러 발생

원인

  • 입력 받은 파일을 pillow를 통해 open하려고 해서 에러가 발생함

해결 방법

  • Django의 form을 이용해서 해결

  • generator/forms.py
from django import forms
from django.forms import ValidationError

def image_file_extension_check(value):
    filename_ext = value.name
    filename_ext = filename_ext.split('.')[-1]
    imagefile_ext = ['JPG', 'jpg', 'PNG', 'png']
    if filename_ext not in imagefile_ext:
        raise ValidationError('{} 파일 확장자는 지원하지 않습니다.'.format(filename_ext))


class GeneratorForm(forms.Form):
    headline = forms.CharField(required=True, label='헤드라인')
    content = forms.CharField(required=True, label='기사내용')
    background_image = forms.ImageField(required=False, 
                                        label='뉴스 배경 화면', 
                                        help_text='검정 배경에 들어갈 사진을 입력하세요.',
                                        validators=[image_file_extension_check]
                                        ) # 1280x720

    headline.widget.attrs.update({'placeholder': '흰색 영역에 들어갈 내용을 입력하세요.'})
    headline.widget.attrs.update({'autocomplete': 'off'})
    content.widget.attrs.update({'placeholder': '노란색 영역에 들어갈 내용을 입력하세요.'})
    content.widget.attrs.update({'autocomplete': 'off'})
    
  • validation을 위해 image_file_extension_check 함수를 만들었다.

 

  • generator/views.py
def fake_news_generator(request):
    if request.method == 'POST':
        form = forms.GeneratorForm(request.POST, request.FILES)
        if form.is_valid():
            pass
        else:
            pass
  • else 구문을 추가하여 사진 파일이 아닐 경우를 처리한다.
Comments