imagehost/imagehosting/views.py
2018-03-28 11:44:05 +03:00

69 lines
2.6 KiB
Python

# -*- coding: utf-8 -*-
from django.shortcuts import render, get_object_or_404, HttpResponseRedirect
from .models import Post
from .forms import PostForm, DeleteForm
from django.shortcuts import redirect
from ih import files, images
from django.contrib.auth.decorators import login_required
from ih import images
from django.views.decorators.csrf import requires_csrf_token
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def create_thumb_from_file(filename):
orig_file = 'imagehost/media/images/' + filename
# Create thumbnail
thumb_name = images.resize_image(orig_file, {
'name': filename,
'size': [300, 300],
'dest': 'imagehost/media/images'
}
)
return thumb_name
@login_required(login_url="/login")
def image_new(request):
if request.method == "POST":
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.save()
create_thumb_from_file(post.orig_name)
return redirect('image_detail', pk=post.id)
else:
form = PostForm()
return render(request, 'imagehosting/index.html', {'form': form})
def image_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'imagehosting/image.html', {'post': post})
def all_posts(request, page='1'):
img_list = Post.objects.order_by('-pk')
paginator = Paginator(img_list, 50)
page = request.GET.get('page')
try:
posts = paginator.page(page)
except PageNotAnInteger: # If page is not an integer, deliver first page.
posts = paginator.page(1)
except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results.
posts = paginator.page(paginator.num_pages)
return render(request, 'imagehosting/all.html', {'all': posts})
@login_required(login_url="/login")
def delete_post(request, pk):
post_to_delete = get_object_or_404(Post, pk=pk)
if request.method == 'GET':
form = DeleteForm(request.POST, instance=post_to_delete)
if form.is_valid(): # checks CSRF
if not request.user.is_authenticated():
return HttpResponseRedirect('/admin')
post_to_delete.delete()
return redirect('all_posts')
return render(request, 'imagehosting/delete.html', {'form': form})