Added django rest framework to members

This commit is contained in:
henu
2017-02-22 17:13:15 +02:00
parent 5fc218323c
commit 4beefd13a4
5 changed files with 81 additions and 1 deletions
+38
View File
@@ -0,0 +1,38 @@
from rest_framework import serializers
from django.utils import timezone
from datetime import datetime
from members.models import Member
from django.conf import settings
class MemberSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
first_name = serializers.CharField(required=True, max_length=127)
last_name = serializers.CharField(required=True, max_length=127)
email = serializers.EmailField(min_length=None, max_length=None, required=True)
POR = serializers.CharField(max_length=255)
AYY = serializers.BooleanField(default=False)
jas = serializers.BooleanField(default=False)
created = serializers.DateTimeField(default=timezone.now)
paid = serializers.DateTimeField(default=datetime.fromtimestamp(0))
def create(self, validated_data):
'''
Create and return a new Member instance, given the validated data.
'''
return Member.objects.create(**validated_data)
def update(self, instance, validated_data):
'''
Update and return an existing Member instance given the validated data.
'''
instance.first_name = validated_data.get('first_name', instance.first_name)
instance.last_name = validated_data.get('last_name', instance.last_name)
instance.email = validated_data.get('email', instance.email)
instance.POR = validated_data.get('POR', instance.POR)
instance.AYY = validated_data.get('AYY', instance.AYY)
instance.jas = validated_data.get('jas', instance.jas)
instance.created = validated_data.get('created', instance.created)
instance.paid = validated_data.get('paid', instance.paid)
instance.save()
return instance
+20
View File
@@ -10,12 +10,32 @@ from django.core.mail import send_mail
import requests import requests
from django.conf import settings from django.conf import settings
import logging import logging
'''Rest API'''
from members.serializers import MemberSerializer
from rest_framework import generics
from rest_framework import generics, status, authentication, exceptions, permissions
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
# Logger function, you can use the same idea when implementing other loggers to other apps # Logger function, you can use the same idea when implementing other loggers to other apps
memberlogger = logging.getLogger(__name__) memberlogger = logging.getLogger(__name__)
logging.basicConfig(format='[%(levelname)s]%(asctime)s %(message)s', level=settings.LOGGERLEVEL, filename=settings.LOGPATH) logging.basicConfig(format='[%(levelname)s]%(asctime)s %(message)s', level=settings.LOGGERLEVEL, filename=settings.LOGPATH)
#API views
########################################
class MembersList(generics.ListCreateAPIView):
queryset = Member.objects.all()
serializer_class = MemberSerializer
permission_classes = (permissions.IsAuthenticated, )
class MemberDetails(generics.RetrieveUpdateDestroyAPIView):
queryset = Member.objects.all()
serializer_class = MemberSerializer
permission_classes = (permissions.IsAuthenticated, )
########################################
# function to validate reCaptcha # function to validate reCaptcha
def validate_recaptcha(response): def validate_recaptcha(response):
values = { values = {
+1
View File
@@ -16,3 +16,4 @@ Pillow==3.3.1
requests==2.11.1 requests==2.11.1
django-nocaptcha-recaptcha==0.0.19 django-nocaptcha-recaptcha==0.0.19
django-cors-headers==2.0.1 django-cors-headers==2.0.1
djangorestframework==3.5.3
+17 -1
View File
@@ -44,6 +44,7 @@ INSTALLED_APPS = [
'webapp', 'webapp',
'members', 'members',
'infoscreen', 'infoscreen',
'rest_framework',
] ]
MIDDLEWARE_CLASSES = [ MIDDLEWARE_CLASSES = [
@@ -58,7 +59,7 @@ MIDDLEWARE_CLASSES = [
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ]
CORS_ORIGIN_ALLOW_ALL = True CORS_ORIGIN_ALLOW_ALL = True
ROOT_URLCONF = 'sikweb.urls' ROOT_URLCONF = 'sikweb.urls'
@@ -118,6 +119,21 @@ AUTH_PASSWORD_VALIDATORS = [
}, },
] ]
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.DjangoModelPermissions',
),
'DEFAULT_THROTTLE_CLASSES': (
'members.throttles.BurstRateThrottle',
'members.throttles.SustainedRateThrottle'
),
'DEFAULT_THROTTLE_RATES': {
'burst': '60/min',
'sustained': '1000/day'
},
}
# Email settings (tested working with gmail) # Email settings (tested working with gmail)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True EMAIL_USE_TLS = True
+5
View File
@@ -42,6 +42,9 @@ from members.views import new_member_request
from members.views import member_requests from members.views import member_requests
from members.views import export_csv as mem_csv_export from members.views import export_csv as mem_csv_export
from members.views import tommy_blooper from members.views import tommy_blooper
# members API
from members.views import MembersList as memsListAPI
from members.views import MemberDetails as memDetailAPI
#infoscreen #infoscreen
from infoscreen.views import index as infoindex from infoscreen.views import index as infoindex
from infoscreen.views import default as infodefault from infoscreen.views import default as infodefault
@@ -97,6 +100,8 @@ urlpatterns = [
url(r'^members/api/request/(?P<idx>\d+)$', handle_mem_request), url(r'^members/api/request/(?P<idx>\d+)$', handle_mem_request),
url(r'^members/api/getCSV$', mem_csv_export), url(r'^members/api/getCSV$', mem_csv_export),
url(r'^members/tommy$', tommy_blooper), url(r'^members/tommy$', tommy_blooper),
url(r'^members/rest/api/members$', memsListAPI.as_view()),
url(r'^members/rest/api/members/(?P<pk>\d+)$', memDetailAPI.as_view()),
#infoscreen #infoscreen
url(r'^infoscreen/$', infodefault), url(r'^infoscreen/$', infodefault),
url(r'^infoscreen/(?P<idx>\d+)$', infoindex), url(r'^infoscreen/(?P<idx>\d+)$', infoindex),