Browse Source

Valida se imagem é .jpeg, .bpm ou .png em edicao de parlamentar

pull/222/head
Eduardo Calil 9 years ago
parent
commit
7cb84b572b
  1. 49
      parlamentares/views.py

49
parlamentares/views.py

@ -7,6 +7,9 @@ from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin
from vanilla import GenericView
from django.forms.fields import ImageField
from io import BytesIO
from django.core.exceptions import ValidationError
from crud import build_crud
@ -256,6 +259,40 @@ class ParlamentaresCadastroView(FormMixin, GenericView):
{'form': form, 'legislatura_id': pk})
class DmitryImageField(ImageField):
def to_python(self, data):
f = super(DmitryImageField, self).to_python(data)
if f is None:
return None
try:
from PIL import Image
except ImportError:
import Image
if hasattr(data, 'temporary_file_path'):
file = data.temporary_file_path()
else:
if hasattr(data, 'read'):
file = BytesIO(data.read())
else:
file = BytesIO(data['content'])
try:
im = Image.open(file)
if im.format not in ('BMP', 'PNG', 'JPEG'):
return -1
except ImportError:
return -2
except Exception:
return -3
if hasattr(f, 'seek') and callable(f.seek):
f.seek(0)
return f
class ParlamentaresEditarView(FormMixin, GenericView):
template_name = "parlamentares/parlamentares_cadastro.html"
@ -279,6 +316,17 @@ class ParlamentaresEditarView(FormMixin, GenericView):
parlamentar = form.save(commit=False)
if 'fotografia' in request.FILES:
parlamentar.fotografia = request.FILES['fotografia']
valida_imagem = DmitryImageField()
# import ipdb; ipdb.set_trace()
try:
valida_imagem.to_python(request.FILES['fotografia'])
except ValidationError:
mensagem = "Por favor, insira uma imagem válida dos formatos\
JPEG, PNG ou BMP"
messages.add_message(request, messages.INFO, mensagem)
return self.render_to_response({'form': form})
else:
pass
parlamentar.biografia = sub(' ',
' ',
strip_tags(form.data['biografia']))
@ -294,7 +342,6 @@ class ParlamentaresEditarView(FormMixin, GenericView):
parlamentar = form.save(commit=False)
parlamentar.fotografia = None
parlamentar.save()
return self.form_valid(form)
else:
return self.render_to_response({'form': form})

Loading…
Cancel
Save