Skip to content
Snippets Groups Projects
Commit 46adcb58 authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

Merge branch 'restapi' into 'master'

introduce REST API

Closes #64

See merge request kif/akplanning!24
parents 3cdaa8a3 7b031a16
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.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'),
])
),
]
from django.shortcuts import get_object_or_404 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: class EventSlugMixin:
...@@ -21,6 +24,14 @@ class EventSlugMixin: ...@@ -21,6 +24,14 @@ class EventSlugMixin:
self._load_event() self._load_event()
return super().post(request, *args, **kwargs) 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): def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(object_list=object_list, **kwargs) context = super().get_context_data(object_list=object_list, **kwargs)
# Add event to context (to make it accessible in templates) # Add event to context (to make it accessible in templates)
...@@ -36,3 +47,51 @@ class FilterByEventSlugMixin(EventSlugMixin): ...@@ -36,3 +47,51 @@ class FilterByEventSlugMixin(EventSlugMixin):
def get_queryset(self): def get_queryset(self):
# Filter current queryset based on url event slug or return 404 if event slug is invalid # Filter current queryset based on url event slug or return 404 if event slug is invalid
return super().get_queryset().filter(event=self.event) 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 = [ ...@@ -46,6 +46,7 @@ INSTALLED_APPS = [
'bootstrap4', 'bootstrap4',
'fontawesome_5', 'fontawesome_5',
'timezone_field', 'timezone_field',
'rest_framework',
] ]
MIDDLEWARE = [ MIDDLEWARE = [
......
...@@ -19,6 +19,7 @@ from django.urls import path, include ...@@ -19,6 +19,7 @@ from django.urls import path, include
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('', include('AKModel.urls', namespace='model')),
path('i18n/', include('django.conf.urls.i18n')) path('i18n/', include('django.conf.urls.i18n'))
] ]
......
...@@ -3,3 +3,4 @@ django-bootstrap4==1.1.1 ...@@ -3,3 +3,4 @@ django-bootstrap4==1.1.1
django-fontawesome-5==1.0.16 django-fontawesome-5==1.0.16
django-split-settings==1.0.1 django-split-settings==1.0.1
django-timezone-field==4.0 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