diff --git a/AKModel/serializers.py b/AKModel/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..7993b6223e44cd219eb5317705a69a5b32e9f325 --- /dev/null +++ b/AKModel/serializers.py @@ -0,0 +1,39 @@ +from rest_framework import serializers + +from AKModel.models import AK, Room, AKSlot, AKTrack, AKCategory, AKOwner + + +class AKOwnerSerializer(serializers.ModelSerializer): + class Meta: + model = AKOwner + fields = '__all__' + + +class AKCategorySerializer(serializers.ModelSerializer): + class Meta: + model = AKCategory + fields = '__all__' + + +class AKTrackSerializer(serializers.ModelSerializer): + class Meta: + model = AKTrack + fields = '__all__' + + +class AKSerializer(serializers.ModelSerializer): + class Meta: + model = AK + fields = '__all__' + + +class RoomSerializer(serializers.ModelSerializer): + class Meta: + model = Room + fields = '__all__' + + +class AKSlotSerializer(serializers.ModelSerializer): + class Meta: + model = AKSlot + fields = '__all__' diff --git a/AKModel/urls.py b/AKModel/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..4ed6404cbcef947a48f92ea6828989bcf7d3bc03 --- /dev/null +++ b/AKModel/urls.py @@ -0,0 +1,23 @@ +from django.urls import include, path +from rest_framework.routers import DefaultRouter + +from AKModel import views + +api_router = DefaultRouter() +api_router.register('akowner', views.AKOwnerViewSet, basename='AKOwner') +api_router.register('akcategory', views.AKCategoryViewSet, basename='AKCategory') +api_router.register('aktrack', views.AKTrackViewSet, basename='AKTrack') +api_router.register('ak', views.AKViewSet, basename='AK') +api_router.register('room', views.RoomViewSet, basename='Room') +api_router.register('akslot', views.AKSlotViewSet, basename='AKSlot') + +app_name = 'model' + +urlpatterns = [ + path( + '<slug:event_slug>/', + include([ + path('api/', include(api_router.urls), name='api'), + ]) + ), +] diff --git a/AKModel/views.py b/AKModel/views.py index 1ef246355f8fa160d3b93577d4b5bfd03d5fbd25..88656ef7c9a7f6b32a75a777856344596f78575f 100644 --- a/AKModel/views.py +++ b/AKModel/views.py @@ -1,6 +1,9 @@ from django.shortcuts import get_object_or_404 +from rest_framework import viewsets, permissions, mixins -from AKModel.models import Event +from AKModel.models import Event, AK, AKSlot, Room, AKTrack, AKCategory, AKOwner +from AKModel.serializers import AKSerializer, AKSlotSerializer, RoomSerializer, AKTrackSerializer, AKCategorySerializer, \ + AKOwnerSerializer class EventSlugMixin: @@ -21,6 +24,14 @@ class EventSlugMixin: 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) @@ -36,3 +47,51 @@ class FilterByEventSlugMixin(EventSlugMixin): 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) diff --git a/AKPlanning/settings.py b/AKPlanning/settings.py index 90d06a00bed3abe0273ea0d536f6e099aaef6c31..d3d55d88d2d2c693ef77ae58452468ae80745ab9 100644 --- a/AKPlanning/settings.py +++ b/AKPlanning/settings.py @@ -46,6 +46,7 @@ INSTALLED_APPS = [ 'bootstrap4', 'fontawesome_5', 'timezone_field', + 'rest_framework', ] MIDDLEWARE = [ diff --git a/AKPlanning/urls.py b/AKPlanning/urls.py index c7c04a384a1c7f6cd822b702048b00b667c3de07..aa5f4538314580bb4a638999a532ee222859d4eb 100644 --- a/AKPlanning/urls.py +++ b/AKPlanning/urls.py @@ -19,6 +19,7 @@ from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), + path('', include('AKModel.urls', namespace='model')), path('i18n/', include('django.conf.urls.i18n')) ] diff --git a/requirements.txt b/requirements.txt index 7620f5983cbdf3fb94e09e1807cd6ba34aa46cba..b06f587734372a2314a549e8e849c6028d723d2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,4 @@ django-bootstrap4==1.1.1 django-fontawesome-5==1.0.16 django-split-settings==1.0.1 django-timezone-field==4.0 +djangorestframework==3.11.0