Проверка размеров в ImageField поле в Django

В веб-фреймворке Django среди базовых полей модели есть ImageField - поле, предназначенное для хранения графических изображений. Ему соответствует одноименное поле в джанговских формах. Которое даже умеет отбраковывать неграфические файлы. Но при этом отсутствуют "из коробки" какие-либо средства для задания максимальных рзмеров изображения и максимального размера файла.

Эта небольшая "проблема" исправляется при помощи создания в форме отдельного метода для проверки данных, пришедших из нужного поля. Например, в модели имеется поле picture, имеющее тип ImageField. В соответствующей форме для редактирования модели создаем метод с именем clean_picture, в котором и делаем проверку.

def clean_picture(self):
  # получаем данные из нужного поля
  picture =  self.cleaned_data['picture']

  try:
    # првряем размеры изображения
    # получаем размеры загружаемого изображения
    w, h = get_image_dimensions(picture)

    # задаем ограничения размеров
    max_width = 200 
    max_height = 300 

    # собственно сравнение
    if w > max_width or h > max_height:
      raise forms.ValidationError(u'Maximum size of upload file is %s x %s pixels.' % (max_height, max_width))

    # не пропускаем файлы, размер (вес) которых более 100 килобайт
    if len(picture) > (100 * 1024):
      raise forms.ValidationError(u'Avatar file size may not exceed 32k.')

  except AttributeError:
    pass:

  return picture

Вот такой несложный код, добавить тут особо нечего.

Опубликован 6 февраля 2013 г. 11:15:41 в Программирование

Всего комментариев: 0