Skip to content
Snippets Groups Projects
Select Git revision
  • 2846768e61bec535f33def5ae72ea9c151d0fed2
  • main default protected
  • docker
  • feature-tracker
  • fix-api
  • feature-event-wizard
  • feature-akslides
  • fix-history-interest
  • feature-constraint-checking-wip
  • feature-constraint-checking
10 results

views.py

Blame
  • Forked from KIF / AKPlanning
    952 commits behind the upstream repository.
    Benjamin Hättasch's avatar
    Benjamin Hättasch authored and Nadja Geisler committed
    Add django-registration-redux dependency
    Adapt settings and urls
    Add view logged-in users to either proceed to the backend or logout
    2846768e
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    views.py 3.63 KiB
    from django.shortcuts import get_object_or_404
    from django.views.generic import TemplateView
    from rest_framework import viewsets, permissions, mixins
    
    from AKModel.models import Event, AK, AKSlot, Room, AKTrack, AKCategory, AKOwner
    from AKModel.serializers import AKSerializer, AKSlotSerializer, RoomSerializer, AKTrackSerializer, AKCategorySerializer, \
        AKOwnerSerializer
    
    
    class EventSlugMixin:
        """
        Mixin to handle views with event slugs
        """
        event = None
    
        def _load_event(self):
            # Find event based on event slug
            self.event = get_object_or_404(Event, slug=self.kwargs.get("event_slug", None))
    
        def get(self, request, *args, **kwargs):
            self._load_event()
            return super().get(request, *args, **kwargs)
    
        def post(self, request, *args, **kwargs):
            self._load_event()
            return super().post(request, *args, **kwargs)
    
        def list(self, request, *args, **kwargs):
            self._load_event()
            return super().list(request, *args, **kwargs)
    
        def create(self, request, *args, **kwargs):
            self._load_event()
            return super().create(request, *args, **kwargs)
    
        def get_context_data(self, *, object_list=None, **kwargs):
            context = super().get_context_data(object_list=object_list, **kwargs)
            # Add event to context (to make it accessible in templates)
            context["event"] = self.event
            return context
    
    
    class FilterByEventSlugMixin(EventSlugMixin):
        """
        Mixin to filter different querysets based on a event slug from the request url
        """
    
        def get_queryset(self):
            # Filter current queryset based on url event slug or return 404 if event slug is invalid
            return super().get_queryset().filter(event=self.event)
    
    
    class AKOwnerViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
        permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
        serializer_class = AKOwnerSerializer
    
        def get_queryset(self):
            return AKOwner.objects.filter(event=self.event)
    
    
    class AKCategoryViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
        permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
        serializer_class = AKCategorySerializer
    
        def get_queryset(self):
            return AKCategory.objects.filter(event=self.event)
    
    
    class AKTrackViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
        permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
        serializer_class = AKTrackSerializer
    
        def get_queryset(self):
            return AKTrack.objects.filter(event=self.event)
    
    
    class AKViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
        permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
        serializer_class = AKSerializer
    
        def get_queryset(self):
            return AK.objects.filter(event=self.event)
    
    
    class RoomViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
        permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
        serializer_class = RoomSerializer
    
        def get_queryset(self):
            return Room.objects.filter(event=self.event)
    
    
    class AKSlotViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
        permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
        serializer_class = AKSlotSerializer
    
        def get_queryset(self):
            return AKSlot.objects.filter(event=self.event)
    
    
    class UserView(TemplateView):
        template_name = "AKModel/user.html"