Найти - Пользователи
Полная версия: Upload и обработка изображения - связь с моделью.
Начало » Django » Upload и обработка изображения - связь с моделью.
1
Ajunta
Здравствуйте!

Помогите найти хороший годный пример аплоада изображений на сервер, их дальнейше обработки (например, ресайза) и сохранения в БД. Нашел несколько примеров о том, как созадть модель:
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.
Lolka
Я делаю так:
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)
...
Ajunta
Lolka
Image.open(l_image.image)
Поясните, пожалуйста, откуда взялась переменная l_image.

В представлении request.FILES возвращает InMemoryUploadedFile, а для модели нужен ImageField, каким образом преобразовать?
Lolka
Здесь 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).
Ajunta
Lolka
Если сделать форму forms.ModelForm, тогда всех танцев с бубном танцевать не надо, достаточно сделать form.save().
Вот, что мне было нужно! Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB