==================================== A minimal Django file upload example ==================================== 1. Create a django project -------------------------- Run startproject:: $ django-admin.py startproject sample now a folder(**sample**) is created:: sample/ manage.py sample/ __init__.py settings.py urls.py wsgi.py 2. create an app ---------------- Create an app:: python manage.py startapp uploader Now a folder(`uploader`) with these files are created:: uploader/ __init__.py admin.py app.py models.py tests.py views.py migrations/ __init__.py 3. Update settings.py --------------------- On `settings.py` add `'uploader'` to `INSTALLED_APPS` and add `MEDIA_ROOT` and `MEDIA_URL`, ie:: INSTALLED_APPS = ( ...... 'uploader', ) MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' 4. Update urls.py ----------------- in `urls.py` add:: ...... from django.conf import settings from django.conf.urls.static import static from uploader import views as uploader_views urlpatterns = [ ...... url(r'^upload/$', uploader_views.home, name='imageupload'), ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 5. Update models ---------------- update `models.py`:: from django.db import models from django.forms import ModelForm class Upload(models.Model): pic = models.FileField(upload_to="images/") upload_date=models.DateTimeField(auto_now_add =True) # FileUpload form class. class UploadForm(ModelForm): class Meta: model = Upload fields = ('pic',) 6. Update views.py ------------------ update `views.py`:: from django.shortcuts import render from uploader.models import UploadForm,Upload from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse # Create your views here. def home(request): if request.method=="POST": img = UploadForm(request.POST, request.FILES) if img.is_valid(): img.save() return HttpResponseRedirect(reverse('imageupload')) else: img=UploadForm() images=Upload.objects.all() return render(request,'home.html',{'form':img,'images':images}) 7. create templates ------------------- Create a folder **templates** in folder **uploader**, then create a file **home.html**, ie **sample/uploader/templates/home.html**::

picture

{% csrf_token %} {{form}}
{% for img in images %} {{forloop.counter}}.{{ img.pic.name }} ({{img.upload_date}})
{% endfor %}
8. Syncronize database ---------------------- Syncronize database and runserver:: >> python manage.py makemigrations >> python manage.py migrate >> python manage.py runserver visit