past3d/pastebin/views.py

77 lines
2.4 KiB
Python
Raw Normal View History

from django.views.generic.edit import CreateView, DeleteView
2013-10-01 16:38:42 +02:00
from django.views.generic.detail import DetailView
2023-07-12 19:44:08 +02:00
from django.urls import reverse
2013-10-15 00:11:04 +02:00
from django.views.generic.base import ContextMixin
from django.core.exceptions import PermissionDenied
2013-11-27 23:10:45 +01:00
from django.views.generic.base import TemplateView
from django.views.generic.list import ListView
2013-10-01 16:38:42 +02:00
2023-07-12 19:44:08 +02:00
from pastebin.forms import GeometryForm, AnonymousGeometryForm
from pastebin.models import Geometry
2013-10-01 16:38:42 +02:00
2013-10-16 23:59:32 +02:00
class LastesGeometriesMixin(ContextMixin):
2023-07-12 19:44:08 +02:00
def get_context_data(self, **kwargs):
context = super(LastesGeometriesMixin, self).get_context_data(**kwargs)
context['latest_geometries'] = Geometry.get_latest()
return context
2013-10-16 23:59:32 +02:00
class GeometryListView(ListView, LastesGeometriesMixin):
2023-07-12 19:44:08 +02:00
queryset = Geometry.objects.all().filter(public=True).order_by('date')
paginate_by = 50
paginate_orphans = 25
page_kwarg = 'page'
context_object_name = 'geometries'
template_name = 'pastebin/geometry_list.html'
2013-10-16 23:59:32 +02:00
2013-10-01 16:38:42 +02:00
class GeometryView(DetailView):
2023-07-12 19:44:08 +02:00
model = Geometry
pk_url_kwarg = 'id'
context_object_name = 'geometry'
template_name = 'pastebin/geometry.html'
2013-10-13 18:41:03 +02:00
2013-10-16 23:59:32 +02:00
class GeometryCreate(CreateView, LastesGeometriesMixin):
2013-10-13 18:41:03 +02:00
model = Geometry
template_name = 'pastebin/geometry_create.html'
def get_success_url(self):
2023-07-12 19:44:08 +02:00
return reverse('geometry_details', kwargs={'id': self.object.id})
2013-10-15 00:11:04 +02:00
def get_form_class(self):
if self.request.user.is_authenticated:
2023-07-12 19:44:08 +02:00
return GeometryForm
else:
return AnonymousGeometryForm
def form_valid(self, form):
2023-07-12 19:44:08 +02:00
res = super(GeometryCreate, self).form_valid(form)
if self.request.user.is_authenticated:
2023-07-12 19:44:08 +02:00
self.object.user = self.request.user
self.object.save()
return res
class GeometryDelete(DeleteView, LastesGeometriesMixin):
model = Geometry
pk_url_kwarg = 'id'
template_name = 'pastebin/geometry_delete.html'
2023-07-12 19:44:08 +02:00
success_url = '/'
def check_user(self, request):
obj = self.get_object()
if obj.user and obj.user.id != request.user.id:
raise PermissionDenied
def get(self, request, *args, **kwargs):
self.check_user(request)
2023-07-12 19:44:08 +02:00
return super(GeometryDelete, self).get(self, request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
self.check_user(request)
2023-07-12 19:44:08 +02:00
return super(GeometryDelete, self).delete(self, request, *args, **kwargs)