~widelands-dev/widelands-website/django_staticfiles

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from django.contrib.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render

from models import Image
from wl_utils import get_real_ip
from forms import UploadImageForm


def display(request, image, revision):
    revision = int(revision)

    img = get_object_or_404(Image, name=image, revision=revision)

    extension = img.image.path[-3:].lower()
    if extension not in ('png', 'gif', 'jpg', 'bmp'):
        extension = 'png'

    r = HttpResponse()
    r['Content-Type'] = 'image/%s' % extension
    r.write(img.image.read())

    return r


@login_required
def upload(request, content_type, object_id, next='/'):
    if request.method == 'POST':
        # A form bound to the POST data
        form = UploadImageForm(request.POST, request.FILES)
        if form.is_valid():  # All validation rules pass
            Image.objects.create_and_save_image(user=request.user, image=request.FILES['imagename'],
                                                content_type=ContentType.objects.get(pk=content_type), object_id=object_id, ip=get_real_ip(request))
            return HttpResponseRedirect(next)  # Redirect after POST
    else:
        form = UploadImageForm()  # An unbound form

    # Get the App (model) to which this image belongs to:
    app = ContentType.objects.get(id=content_type)
    # Get the current object's name (provided by __unicode__()) from this model
    name = app.get_object_for_this_type(id=object_id)

    return render(request, 'wlimages/upload.html', {
        'upload_form': form,
        'referer': name,}
                  )