article

Friday, May 22, 2020

Django How To Upload Images using Pillow Python Imaging Library


Django How To Upload Images using Pillow Python Imaging Library

In this article, we will learn how to upload images in a Django application using Pillow Python Imaging Library. https://pypi.org/project/Pillow/

models.py



 
#models.py
from django.db import models
 
class Image(models.Model):
    title = models.CharField(max_length=200)
    image = models.ImageField(upload_to='images')

    def __str__(self):
        return self.title
  
    class Meta:  
        db_table = "myapp_image"
The upload_to parameters specify the location where images will be stored which for this model is MEDIA_ROOT/images/

Install Pillow by running the following command in your shell.

pip install Pillow

settings.py

# Base url to serve media files
MEDIA_URL = '/media/'

# Path where media is stored

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

urls.py file
 
#urls.py
from django.contrib import admin  
from django.urls import path
from myapp import views  

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [  
    path('admin/', admin.site.urls),  
    path('',views.index),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
forms.py
 
#forms.py
from django import forms
from myapp.models import Image


class ImageForm(forms.ModelForm):
    """Form for the image model"""
    class Meta:
        model = Image
        fields = ('title', 'image')
 
#views.py
from django.shortcuts import render, redirect

from myapp.forms import ImageForm

def index(request):
    """Process images uploaded by users"""
    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            # Get the current instance object to display in the template
            img_obj = form.instance
            return render(request, 'index.html', {'form': form, 'img_obj': img_obj})
    else:
        form = ImageForm()
    return render(request, 'index.html', {'form': form})
//templates/index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="">
  <meta name="author" content="">
  <title>upload imagae</title>
</head>
<body>
<p><h1>Django How To Upload Images using Pillow Python Imaging Library</h1></p>
<p><h4>pip install Pillow</h4></p>
<form method="post" enctype="multipart/form-data">
  {% csrf_token %}
   {{ form.as_p }}
  <button type="submit">Upload</button>
</form>

{% if img_obj %}
  <h3>Succesfully uploaded : {{img_obj.title}}</h3>
  <img src="{{ img_obj.image.url}}" alt="connect" style="max-height:300px">
{% endif %}

</body>
</html>

Related Post