2022-12-18 09:24:55 +01:00
|
|
|
import secrets
|
2022-12-17 13:42:34 +01:00
|
|
|
|
2022-12-18 09:24:55 +01:00
|
|
|
from django.views import View
|
|
|
|
from django.views.generic.list import ListView
|
|
|
|
from django.shortcuts import render, redirect
|
|
|
|
from django.urls import reverse
|
|
|
|
|
|
|
|
from .forms import ImageUploadForm
|
2022-12-25 12:20:38 +01:00
|
|
|
from .models import (
|
|
|
|
Image,
|
|
|
|
Visitor
|
|
|
|
)
|
2022-12-18 09:24:55 +01:00
|
|
|
|
2022-12-25 12:20:38 +01:00
|
|
|
class VisitorSessionMixin(View):
|
|
|
|
def get_visitor(self):
|
|
|
|
if self.request.session:
|
|
|
|
if 'visitor_session' in self.request.session:
|
|
|
|
if Visitor.objects.get(session_id=self.request.session['visitor_session']).exists():
|
|
|
|
return Visitor.objects.get(session_id=self.request.session['visitor_session'])
|
|
|
|
else:
|
|
|
|
visitor = Visitor.objects.create()
|
|
|
|
self.request.session['visitor_session'] = visitor.session_id
|
|
|
|
return visitor
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
class ImageUploadView(VisitorSessionMixin, View):
|
2022-12-18 09:24:55 +01:00
|
|
|
def get(self, request):
|
|
|
|
form = ImageUploadForm()
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'upload_image/upload.html',
|
|
|
|
{
|
|
|
|
'form': form
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
def post(self, request):
|
|
|
|
form = ImageUploadForm(
|
|
|
|
request.POST,
|
|
|
|
request.FILES
|
|
|
|
)
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
image = form.save(commit=False)
|
|
|
|
|
|
|
|
if image.private:
|
|
|
|
image.access_code = secrets.token_hex(32)
|
|
|
|
|
2022-12-25 12:20:38 +01:00
|
|
|
image.uploaded_by = self.get_visitor()
|
|
|
|
print(image.uploaded_by)
|
2022-12-18 09:24:55 +01:00
|
|
|
image.save()
|
|
|
|
return redirect(
|
|
|
|
reverse('home')
|
|
|
|
)
|
|
|
|
else:
|
|
|
|
form = ImageUploadForm()
|
|
|
|
return render(
|
|
|
|
request,
|
|
|
|
'upload_image/upload.html',
|
|
|
|
{
|
|
|
|
'form': form
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
class PublicImageListView(ListView):
|
|
|
|
model = Image
|
|
|
|
paginate_by = 20
|
|
|
|
context_object_name = 'images'
|
|
|
|
template_name = 'list_images/image_list.html'
|
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
return Image.objects.all().filter(private=False)
|