diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/admin.py b/api/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/api/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/api/apps.py b/api/apps.py new file mode 100644 index 0000000..d87006d --- /dev/null +++ b/api/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ApiConfig(AppConfig): + name = 'api' diff --git a/api/models.py b/api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/api/serializers.py b/api/serializers.py new file mode 100644 index 0000000..2eaee91 --- /dev/null +++ b/api/serializers.py @@ -0,0 +1,29 @@ +from rest_framework import serializers + +from workshop_app.models import Workshop, WorkshopType + + +class WorkshopTypeSerializer(serializers.ModelSerializer): + + class Meta: + model = WorkshopType + exclude = ['terms_and_conditions'] + + +class WorkshopTypeField(serializers.PrimaryKeyRelatedField): + def to_representation(self, value): + pk = super(WorkshopTypeField, self).to_representation(value) + items = WorkshopType.objects.filter(pk=pk) + if items.exists(): + serializer = WorkshopTypeSerializer(items.first()) + return serializer.data + else: + return None + + +class WorkshopSerializer(serializers.ModelSerializer): + workshop_type = WorkshopTypeField(read_only=True) + + class Meta: + model = Workshop + exclude = ['tnc_accepted'] diff --git a/api/tests.py b/api/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/api/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/api/urls.py b/api/urls.py new file mode 100644 index 0000000..b0775bc --- /dev/null +++ b/api/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url + +from api import views + +urlpatterns = [ + url(r'^upcoming_workshops$', views.UpcomingWorkshops.as_view(), name='index'), +] diff --git a/api/views.py b/api/views.py new file mode 100644 index 0000000..a6c27c9 --- /dev/null +++ b/api/views.py @@ -0,0 +1,20 @@ +# Create your views here. +from rest_framework.generics import ListAPIView + +from api.serializers import WorkshopSerializer +from workshop_app.models import Workshop + + +class UpcomingWorkshops(ListAPIView): + serializer_class = WorkshopSerializer + + def get_queryset(self): + params = self.request.GET + queryset = Workshop.objects.all() + if params.get('status', None): + queryset = queryset.filter(status=params.get('status')) + if params.get('date_from'): + queryset = queryset.filter(date__gte=params.get('date_from')) + if params.get('date_to'): + queryset = queryset.filter(date__lte=params.get('date_to')) + return queryset diff --git a/requirements.txt b/requirements.txt index a0f66a1..e54c182 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,5 @@ pytz==2016.10 six==1.10.0 coverage pyaml +djangorestframework==3.11.0 +django-cors-headers==3.3.0 \ No newline at end of file diff --git a/workshop_portal/settings.py b/workshop_portal/settings.py index 23f9f1a..45b5c06 100644 --- a/workshop_portal/settings.py +++ b/workshop_portal/settings.py @@ -44,6 +44,8 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'corsheaders', + 'rest_framework', 'workshop_app', 'statistics_app', 'teams', @@ -52,12 +54,16 @@ MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] +# Allow API cross origin requests from all origins +CORS_ORIGIN_ALLOW_ALL = True + ROOT_URLCONF = 'workshop_portal.urls' TEMPLATES = [ diff --git a/workshop_portal/urls.py b/workshop_portal/urls.py index 16bdfb3..fb73a0a 100644 --- a/workshop_portal/urls.py +++ b/workshop_portal/urls.py @@ -20,5 +20,5 @@ urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^', include('workshop_app.urls')), - + url(r'^api/', include('api.urls')) ]