From 3a72c7187f349ce33a30e8c2e1f2345f274e6e00 Mon Sep 17 00:00:00 2001 From: Joel Byrnes Date: Tue, 29 Mar 2016 23:37:18 +1000 Subject: [PATCH] add demo classes and requirements --- .gitignore | 1 + bulk_load/models.py | 16 ++++++++++++++++ bulk_load/serializers.py | 32 ++++++++++++++++++++++++++++++++ bulk_load/views.py | 32 +++++++++++++++++++++++++++++++- drf_bulk_load/settings.py | 10 ++++++++++ drf_bulk_load/urls.py | 11 +++++++++++ requirements.txt | 4 ++++ 7 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 bulk_load/serializers.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore index 3bcdca0..2b49a7a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ *.iml *.iws *.ipr +*.sqlite* diff --git a/bulk_load/models.py b/bulk_load/models.py index 71a8362..33025f2 100644 --- a/bulk_load/models.py +++ b/bulk_load/models.py @@ -1,3 +1,19 @@ from django.db import models +from django.contrib.auth.models import User # Create your models here. + +class Parameter(models.Model): + name = models.CharField(max_length=100) + + +class Answer(models.Model): + user = models.ForeignKey(User, null=False, blank=False) + parameter = models.ForeignKey(Parameter, null=False, blank=False) + answer_number = models.FloatField(null=True, blank=True) + answer_date = models.DateField(null=True, blank=True) + answer_boolean = models.BooleanField(default=False) + answer_currency = models.DecimalField(null=True, blank=True, max_digits=24, decimal_places=8) + + class Meta: + unique_together = ("user", "parameter") diff --git a/bulk_load/serializers.py b/bulk_load/serializers.py new file mode 100644 index 0000000..c4301c7 --- /dev/null +++ b/bulk_load/serializers.py @@ -0,0 +1,32 @@ +from rest_framework import serializers +from rest_framework_bulk import ListBulkCreateUpdateAPIView +from rest_framework_bulk.drf3.serializers import BulkSerializerMixin, BulkListSerializer + +from django.contrib.auth.models import User, Group +from tinyobj.fields import NoValidationField +from bulk_load.models import Answer + + +class UserSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = User + fields = ('url', 'username', 'email', 'groups') + + +class GroupSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Group + fields = ('url', 'name') + + +# https://github.com/miki725/django-rest-framework-bulk/issues/30 + +#the serializer +class AnswerSerializer(BulkSerializerMixin, serializers.ModelSerializer): + # answer = NoValidationField() + + class Meta: + model = Answer + # fields = ['id', 'answer', 'parameter', 'user'] + fields = ['id', 'parameter', 'user'] + list_serializer_class = BulkListSerializer diff --git a/bulk_load/views.py b/bulk_load/views.py index 91ea44a..011b15f 100644 --- a/bulk_load/views.py +++ b/bulk_load/views.py @@ -1,3 +1,33 @@ from django.shortcuts import render -# Create your views here. +from rest_framework import viewsets +from django.contrib.auth.models import User, Group +from rest_framework_bulk import ListBulkCreateUpdateAPIView + +from bulk_load.models import Answer +from bulk_load.serializers import UserSerializer, GroupSerializer, AnswerSerializer + + +class UserViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows users to be viewed or edited. + """ + queryset = User.objects.all().order_by('-date_joined') + serializer_class = UserSerializer + + +class GroupViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows groups to be viewed or edited. + """ + queryset = Group.objects.all() + serializer_class = GroupSerializer + + +# https://github.com/miki725/django-rest-framework-bulk/issues/30 + + +#the view +class AnswerList(ListBulkCreateUpdateAPIView): + queryset = Answer.objects.all() + serializer_class = AnswerSerializer diff --git a/drf_bulk_load/settings.py b/drf_bulk_load/settings.py index c85f52c..a716fdd 100644 --- a/drf_bulk_load/settings.py +++ b/drf_bulk_load/settings.py @@ -36,6 +36,10 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + + 'bulk_load', + + 'rest_framework', ) MIDDLEWARE_CLASSES = ( @@ -81,3 +85,9 @@ # https://docs.djangoproject.com/en/1.7/howto/static-files/ STATIC_URL = '/static/' + +REST_FRAMEWORK = { + 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), + 'PAGE_SIZE': 10 +} + diff --git a/drf_bulk_load/urls.py b/drf_bulk_load/urls.py index 5c88487..9405dcd 100644 --- a/drf_bulk_load/urls.py +++ b/drf_bulk_load/urls.py @@ -1,5 +1,12 @@ from django.conf.urls import patterns, include, url from django.contrib import admin +from rest_framework import routers +from bulk_load import views + +router = routers.DefaultRouter() +router.register(r'users', views.UserViewSet) +router.register(r'groups', views.GroupViewSet) +# router.register(r'answers', views.AnswerList) urlpatterns = patterns('', # Examples: @@ -7,4 +14,8 @@ # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), + + url(r'^', include(router.urls)), + url(r'^answers/$', views.AnswerList.as_view()), + url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3c38755 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +Django==1.7 +djangorestframework==3.3.3 +djangorestframework-bulk==0.2.1 +tinyobj==0.1.0