Add REST API to webinterface
This commit is contained in:
parent
782f5cbe32
commit
ddb09d148e
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
|
@ -0,0 +1,5 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ApiConfig(AppConfig):
|
||||
name = 'api'
|
|
@ -0,0 +1,3 @@
|
|||
from django.db import models
|
||||
|
||||
# Create your models here.
|
|
@ -0,0 +1,63 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
from contest.models import Contest, Band, Frequency, QSO, EntryCategory, User, ShadowCall, Reference
|
||||
|
||||
|
||||
class ContestSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Contest
|
||||
# FIXME: add callQrg
|
||||
fields = ('id', 'shortName', 'deadline', 'qsoStartTime', 'qsoEndTime', 'callQrg')
|
||||
|
||||
|
||||
class BandSerializer(serializers.ModelSerializer):
|
||||
# contest = ContestSerializer()
|
||||
|
||||
class Meta:
|
||||
model = Band
|
||||
fields = ('id', 'name', 'contest')
|
||||
|
||||
|
||||
class FrequencySerializer(serializers.ModelSerializer):
|
||||
# band = BandSerializer()
|
||||
|
||||
class Meta:
|
||||
model = Frequency
|
||||
fields = ('id', 'channel', 'qrg', 'band', 'note')
|
||||
|
||||
|
||||
class EntryCategorySerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = EntryCategory
|
||||
fields = ('id', 'name', 'description')
|
||||
|
||||
|
||||
class ReferenceSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Reference
|
||||
fields = ('id', 'name', 'description')
|
||||
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
ref = ReferenceSerializer()
|
||||
cat = EntryCategorySerializer()
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ('id', 'ref', 'cat', 'location', 'opName', 'regTime', 'dncall', 'qrv2m', 'qrv70cm', 'extra2m70cm')
|
||||
|
||||
|
||||
class QSOSerializer(serializers.ModelSerializer):
|
||||
# owner = UserSerializer()
|
||||
|
||||
class Meta:
|
||||
model = QSO
|
||||
fields = ('id', 'owner', 'time', 'call', 'callRef', 'remarks')
|
||||
|
||||
|
||||
class ShadowCallSerializer(serializers.ModelSerializer):
|
||||
ref = ReferenceSerializer()
|
||||
|
||||
class Meta:
|
||||
model = ShadowCall
|
||||
fields = ('id', 'username', 'ref', 'location', 'opName', 'regTime')
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
|
@ -0,0 +1,19 @@
|
|||
from django.conf.urls import include, url
|
||||
from rest_framework import routers
|
||||
|
||||
from .views import ContestViewSet, BandViewSet, FrequencyViewSet, EntryCategoryViewSet, ReferenceViewSet, QSOViewSet, \
|
||||
ShadowCallViewSet
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('contests', ContestViewSet)
|
||||
router.register('bands', BandViewSet)
|
||||
router.register('frequencies', FrequencyViewSet)
|
||||
router.register('entrycategories', EntryCategoryViewSet)
|
||||
router.register('references', ReferenceViewSet)
|
||||
router.register('qsos', QSOViewSet, basename='qso')
|
||||
router.register('shadowcalls', ShadowCallViewSet)
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^', include(router.urls)),
|
||||
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
||||
]
|
|
@ -0,0 +1,52 @@
|
|||
from rest_framework import viewsets
|
||||
from rest_framework.permissions import IsAuthenticated, IsAdminUser
|
||||
|
||||
|
||||
from .serializers import ContestSerializer, BandSerializer, FrequencySerializer, EntryCategorySerializer, \
|
||||
ReferenceSerializer, QSOSerializer, ShadowCallSerializer
|
||||
from contest.models import Contest, Band, Frequency, EntryCategory, Reference, QSO, ShadowCall
|
||||
|
||||
|
||||
class ContestViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = Contest.objects.all()
|
||||
serializer_class = ContestSerializer
|
||||
|
||||
|
||||
class BandViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = Band.objects.all()
|
||||
serializer_class = BandSerializer
|
||||
|
||||
|
||||
class FrequencyViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = Frequency.objects.all()
|
||||
serializer_class = FrequencySerializer
|
||||
|
||||
|
||||
class EntryCategoryViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
queryset = EntryCategory.objects.all()
|
||||
serializer_class = EntryCategorySerializer
|
||||
|
||||
|
||||
class ReferenceViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
permission_classes = [IsAdminUser]
|
||||
queryset = Reference.objects.all()
|
||||
serializer_class = ReferenceSerializer
|
||||
|
||||
|
||||
class QSOViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
permission_classes = [IsAuthenticated]
|
||||
serializer_class = QSOSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return QSO.objects.filter(owner=self.request.user)
|
||||
|
||||
|
||||
class UserProfile(viewsets.ReadOnlyModelViewSet):
|
||||
"""Return the currently authenticated user as a single item"""
|
||||
pass
|
||||
|
||||
|
||||
class ShadowCallViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
permission_classes = [IsAdminUser]
|
||||
queryset = ShadowCall.objects.all()
|
||||
serializer_class = ShadowCallSerializer
|
|
@ -41,9 +41,11 @@ INSTALLED_APPS = [
|
|||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'crispy_forms',
|
||||
'rest_framework',
|
||||
|
||||
# local
|
||||
'contest',
|
||||
'api',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
|
|
@ -34,6 +34,7 @@ urlpatterns = [
|
|||
url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'),
|
||||
url(r'^register/$', register, name='register'),
|
||||
url(r'^profile/$', profile, name='profile'),
|
||||
url(r'^api/', include('api.urls')),
|
||||
#url(r'^register/$', CreateView.as_view(
|
||||
# template_name='registration/register.html',
|
||||
# form_class=CustomUserCreationForm,
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
Django<1.12
|
||||
django-crispy-forms
|
||||
django-rest-framework
|
||||
|
|
Loading…
Reference in New Issue