diff --git a/picampaign/campaign/serializers.py b/picampaign/campaign/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..9ba7d90a165155070fa67665031767c8b06e1038 --- /dev/null +++ b/picampaign/campaign/serializers.py @@ -0,0 +1,25 @@ +from picampaign.campaign.models import Campaign, CampaignContact, Contact +from rest_framework import serializers + + +class ContactSerializer(serializers.ModelSerializer): + + class Meta: + model = Contact + fields = ('id', 'first_name', 'last_name', 'phone') + + +class CampaignSerializer(serializers.HyperlinkedModelSerializer): + + class Meta: + model = Campaign + fields = ('id', 'title', 'description', 'start_date', 'end_date') + + +class CampaignContactSerializer(serializers.HyperlinkedModelSerializer): + + contact = ContactSerializer(many=False) + + class Meta: + model = CampaignContact + fields = ('id', 'weight', 'contact') diff --git a/picampaign/campaign/views.py b/picampaign/campaign/views.py index 91ea44a218fbd2f408430959283f0419c921093e..e870f49237086d2539e24b965efb8835edee4e68 100644 --- a/picampaign/campaign/views.py +++ b/picampaign/campaign/views.py @@ -1,3 +1,28 @@ -from django.shortcuts import render +from rest_framework import viewsets, status +from rest_framework.response import Response +from picampaign.campaign.models import Campaign, CampaignContact +from picampaign.campaign.serializers import (CampaignSerializer, + CampaignContactSerializer) -# Create your views here. + +class CampaignViewSet(viewsets.ReadOnlyModelViewSet): + """ + API endpoint for campaign view + """ + queryset = Campaign.objects.all() + serializer_class = CampaignSerializer + + +class CampaignContactViewSet(viewsets.ReadOnlyModelViewSet): + """ + API endpoint to view contacts related to a campaign + """ + queryset = CampaignContact.objects.all() + serializer_class = CampaignContactSerializer + + def list(self, request, campaign_pk=None): + contacts = self.queryset.filter(campaign=campaign_pk) + serializer = self.serializer_class(contacts.all(), many=True) + # if serializer.is_valid(): + return Response(serializer.data) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) diff --git a/picampaign/settings.py b/picampaign/settings.py index 98c3ddb963b9df3e3d6b619471c8802e41010424..7b242dc68fda090e34ad02961fd63f6ae4b58d28 100644 --- a/picampaign/settings.py +++ b/picampaign/settings.py @@ -36,6 +36,7 @@ INSTALLED_APPS = ( 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'rest_framework', 'picampaign.campaign', 'picampaign.organization', 'picampaign.feedback', @@ -84,3 +85,8 @@ USE_TZ = True # https://docs.djangoproject.com/en/1.7/howto/static-files/ STATIC_URL = '/static/' + +#REST_FRAMEWORK = { +# 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), +# 'PAGINATE_BY': 10 +#} diff --git a/picampaign/urls.py b/picampaign/urls.py index 54d5698ad16cf5e20d2dcad780a7ca7a4b880191..d683dcad145e79a6e2b4c2598f1505fcca3a7e5c 100644 --- a/picampaign/urls.py +++ b/picampaign/urls.py @@ -1,10 +1,18 @@ from django.conf.urls import patterns, include, url from django.contrib import admin +from rest_framework_nested import routers -urlpatterns = patterns('', - # Examples: - # url(r'^$', 'campaign.views.home', name='home'), - # url(r'^blog/', include('blog.urls')), +from picampaign.campaign.views import CampaignViewSet, CampaignContactViewSet + +router = routers.SimpleRouter() +router.register(r'campaigns', CampaignViewSet) + +campaign_router = routers.NestedSimpleRouter(router, r'campaigns', + lookup='campaign') +campaign_router.register(r'contacts', CampaignContactViewSet) - url(r'^admin/', include(admin.site.urls)), -) + +urlpatterns = patterns('', + url(r'^admin/', include(admin.site.urls)), + url(r'^', include(router.urls)), + url(r'^', include(campaign_router.urls))) diff --git a/setup.py b/setup.py index 93dc7ae6f9835c947f0a051106802e411e627ae4..3d6486813f4a6ca49c5247205000ef3382c20294 100644 --- a/setup.py +++ b/setup.py @@ -7,6 +7,8 @@ README = open(os.path.join(here, 'README')).read() requires = [ 'django', + 'djangorestframework', + 'drf-nested-routers', ] setup(name='picampaign',