Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Upload и обработка изображения - связь с моделью. [RSS Feed]

#1 Окт. 3, 2009 13:51:34

Ajunta
От:
Зарегистрирован: 2009-05-31
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Upload и обработка изображения - связь с моделью.

Здравствуйте!

Помогите найти хороший годный пример аплоада изображений на сервер, их дальнейше обработки (например, ресайза) и сохранения в БД. Нашел несколько примеров о том, как созадть модель:

class MyImage(models.Model):
name = models.CharField(max_length=30)
description = models.CharField(max_length=250)
image= models.ImageField(upload_to='images')
Далее форму:
class ImageUploadForm(forms.Form):
name = forms.CharField(max_length=30)
description = forms.CharField(max_length=250)
image = forms.ImageField()
Загвоздка в представлении:
def picview(request):
if request.method == 'POST':
form = ImageUploadForm(request.POST, request.FILES)
if form.is_valid():
#Обработка проверенных данных - ?
else:
...
return ....
Если данные прошли проверку, надо создать экземплар класса MyImage, заполнить в нем поля и созранить. Для текстовых полей все понятно, а вот что делать с изображением? Надо его как-то получить и привязать к созданному объекту MyImage.



Офлайн

#2 Окт. 3, 2009 16:00:16

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

Upload и обработка изображения - связь с моделью.

Я делаю так:

def handle_uploaded_file(f, filename):
""" загрузка файла """
destination = open(filename, 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()

...

if form.is_valid():
...
handle_uploaded_file(request.FILES['f'], 'some_filename')
...
А потом уже можно PIL:
thumbnail_image = Image.open(l_image.image)
thumbnail_image.thumbnail((100, thumbnail_image.size[1]-10), Image.ANTIALIAS)
...



Отредактировано (Окт. 3, 2009 16:01:25)

Офлайн

#3 Окт. 3, 2009 18:08:47

Ajunta
От:
Зарегистрирован: 2009-05-31
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Upload и обработка изображения - связь с моделью.

Lolka
Image.open(l_image.image)
Поясните, пожалуйста, откуда взялась переменная l_image.

В представлении request.FILES возвращает InMemoryUploadedFile, а для модели нужен ImageField, каким образом преобразовать?



Отредактировано (Окт. 3, 2009 18:53:08)

Офлайн

#4 Окт. 3, 2009 21:54:09

Lolka
От:
Зарегистрирован: 2007-09-29
Сообщения: 128
Репутация: +  0  -
Профиль   Отправить e-mail  

Upload и обработка изображения - связь с моделью.

Здесь thumbnail_image = Image.open(l_image.image) – просто обычный путь к файлу прописывается. Скажем, в вашем случае если l_image это объект класса MyImage – будет работать.
Если сделать форму forms.ModelForm, тогда всех танцев с бубном танцевать не надо, достаточно сделать form.save().
В противном случае handle_uploaded_file сохраняет файл, скажем, с именем filename, а создание строки будет работать так: MyImage.objects.create(name=form.cleaned_data, description=form.cleaned_data, image=filename).



Отредактировано (Окт. 3, 2009 21:55:33)

Офлайн

#5 Окт. 4, 2009 12:16:16

Ajunta
От:
Зарегистрирован: 2009-05-31
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Upload и обработка изображения - связь с моделью.

Lolka
Если сделать форму forms.ModelForm, тогда всех танцев с бубном танцевать не надо, достаточно сделать form.save().
Вот, что мне было нужно! Спасибо!



Офлайн

  • Начало
  • » Django
  • » Upload и обработка изображения - связь с моделью.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version