Skip to content
Snippets Groups Projects
Commit a93d0d59 authored by Nadja Geisler's avatar Nadja Geisler :sunny: Committed by Benjamin Hättasch
Browse files

introduce REST API

add djangorestframework
add serializers for select models
create api urls
extend EventSlugMixin to work for list and create methods
create list and retrieve viewsets for select models
include AKModel URLS into main app
parent 3cdaa8a3
No related branches found
No related tags found
No related merge requests found
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__'
from django.urls import include, path
from rest_framework.routers import DefaultRouter
from AKModel import views
api_router = DefaultRouter()
api_router.register('akowner', views.AKViewSet, basename='AKOwner')
api_router.register('akcategory', views.AKViewSet, basename='AKCategory')
api_router.register('aktrack', views.AKViewSet, basename='AKTrack')
api_router.register('ak', views.AKViewSet, basename='AK')
api_router.register('room', views.AKViewSet, basename='Room')
api_router.register('akslot', views.AKViewSet, basename='AKSlot')
app_name = 'model'
urlpatterns = [
path(
'<slug:event_slug>/',
include([
path('api/', include(api_router.urls), name='api'),
])
),
]
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)
......@@ -46,6 +46,7 @@ INSTALLED_APPS = [
'bootstrap4',
'fontawesome_5',
'timezone_field',
'rest_framework',
]
MIDDLEWARE = [
......
......@@ -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'))
]
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment