Skip to content
Snippets Groups Projects
Commit b0f42d9d authored by Parbhat Puri's avatar Parbhat Puri Committed by Fredrik Jonsson
Browse files

Initial DRF integration, permissions and submissions list endpoint

parent be8346f8
No related branches found
No related tags found
No related merge requests found
from rest_framework import generics
from rest_framework import permissions
from django_filters.rest_framework import DjangoFilterBackend
from .models import ApplicationSubmission
from .serializers import SubmissionListSerializer, SubmissionDetailSerializer
from .permissions import IsApplyStaffUser
class SubmissionList(generics.ListAPIView):
queryset = ApplicationSubmission.objects.all()
serializer_class = SubmissionListSerializer
permission_classes = (
permissions.IsAuthenticated, IsApplyStaffUser,
)
filter_backends = (DjangoFilterBackend,)
filter_fields = ('round', 'status')
class SubmissionDetail(generics.RetrieveAPIView):
queryset = ApplicationSubmission.objects.all()
serializer_class = SubmissionDetailSerializer
permission_classes = (
permissions.IsAuthenticated, IsApplyStaffUser,
)
from rest_framework import permissions
class IsApplyStaffUser(permissions.BasePermission):
"""
Custom permission to only allow OTF Staff or higher
"""
def has_permission(self, request, view):
return request.user.is_apply_staff
def has_object_permission(self, request, view, obj):
return request.user.is_apply_staff
from rest_framework import serializers
from .models import ApplicationSubmission
class SubmissionListSerializer(serializers.ModelSerializer):
class Meta:
model = ApplicationSubmission
fields = ('id',)
class SubmissionDetailSerializer(serializers.ModelSerializer):
class Meta:
model = ApplicationSubmission
fields = ('id', 'title',)
...@@ -10,6 +10,7 @@ from .views import ( ...@@ -10,6 +10,7 @@ from .views import (
SubmissionSealedView, SubmissionSealedView,
SubmissionSearchView, SubmissionSearchView,
) )
from .api_views import SubmissionList, SubmissionDetail
revision_urls = ([ revision_urls = ([
...@@ -35,8 +36,14 @@ submission_urls = ([ ...@@ -35,8 +36,14 @@ submission_urls = ([
path('rounds/<int:pk>/', SubmissionsByRound.as_view(), name="by_round"), path('rounds/<int:pk>/', SubmissionsByRound.as_view(), name="by_round"),
], 'submissions') ], 'submissions')
submission_api_urls = ([
path('', SubmissionList.as_view(), name='list'),
path('<int:pk>/', SubmissionDetail.as_view(), name='detail'),
], 'submissions-api')
urlpatterns = [ urlpatterns = [
path('submissions/', include(submission_urls)), path('submissions/', include(submission_urls)),
path('api/submissions/', include(submission_api_urls)),
path('search/', SubmissionSearchView.as_view(), name="search"), path('search/', SubmissionSearchView.as_view(), name="search"),
] ]
...@@ -116,6 +116,7 @@ INSTALLED_APPS = [ ...@@ -116,6 +116,7 @@ INSTALLED_APPS = [
'django_bleach', 'django_bleach',
'django_fsm', 'django_fsm',
'django_pwned_passwords', 'django_pwned_passwords',
'rest_framework',
'hijack', 'hijack',
'compat', 'compat',
...@@ -605,3 +606,16 @@ WEBPACK_LOADER = { ...@@ -605,3 +606,16 @@ WEBPACK_LOADER = {
COUNTRIES_OVERRIDE = { COUNTRIES_OVERRIDE = {
'KV': 'Kosovo', 'KV': 'Kosovo',
} }
# Rest Framework configuration
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
django~=2.0.0 django~=2.0.0
djangorestframework==3.7.4 djangorestframework==3.9.0
django-fsm==2.6.0 django-fsm==2.6.0
wagtail~=2.2.0 wagtail~=2.2.0
psycopg2==2.7.3.1 psycopg2==2.7.3.1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment