From 19498576225aa4d66e61c3d95ad5980c54b21a01 Mon Sep 17 00:00:00 2001 From: borzechof99 <borzechof99@mi.fu-berlin.de> Date: Thu, 27 May 2021 20:33:40 +0200 Subject: [PATCH] Set Up API, add Views for Sports and Criterions Co-authored-by: Dominik <dominip89@mi.fu-berlin.de> Co-authored-by: Josie <josiepark@mi.fu-berlin.de> --- requirements.txt | 3 --- unisportomat/quiz/admin.py | 4 +++- unisportomat/quiz/serializers.py | 25 +++++++++++++++++++++++++ unisportomat/quiz/views.py | 27 ++++++++++++++++++++++++++- unisportomat/unisportomat/settings.py | 11 ++++++++++- unisportomat/unisportomat/urls.py | 11 +++++++++-- 6 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 unisportomat/quiz/serializers.py diff --git a/requirements.txt b/requirements.txt index 8461072..4634623 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,9 +9,6 @@ requests==2.25.1 soupsieve==2.2.1 sqlparse==0.4.1 urllib3==1.26.4 -<<<<<<< HEAD Pillow==8.2.0 -======= django-cors-headers==3.7.0 djangorestframework==3.12.4 ->>>>>>> Add CORS-Header and REST-Framework to Requirements diff --git a/unisportomat/quiz/admin.py b/unisportomat/quiz/admin.py index d8fd657..c3e5d65 100644 --- a/unisportomat/quiz/admin.py +++ b/unisportomat/quiz/admin.py @@ -3,6 +3,8 @@ from django.contrib import admin # Register your models here. -from .models import Sport +from .models import Sport, Criterion, CriterionRating admin.site.register(Sport) +admin.site.register(Criterion) +admin.site.register(CriterionRating) diff --git a/unisportomat/quiz/serializers.py b/unisportomat/quiz/serializers.py new file mode 100644 index 0000000..6c4b25e --- /dev/null +++ b/unisportomat/quiz/serializers.py @@ -0,0 +1,25 @@ +""" +Serializers creating JSONs for every Model from .models +""" +from rest_framework import serializers +from .models import Sport, Criterion + + +class SportListSerializer(serializers.ModelSerializer): + """ + Serializes all sports. + """ + + class Meta: + model = Sport + fields = ("id", "name", "url", "criteria_ratings") + + +class CriterionListSerializer(serializers.ModelSerializer): + """ + Serializes Criterions + """ + + class Meta: + model = Criterion + fields = ("id", "name", "sport_ratings") diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py index 4748ab8..c512052 100644 --- a/unisportomat/quiz/views.py +++ b/unisportomat/quiz/views.py @@ -1,3 +1,28 @@ -""" Defines the views for the quiz app """ +""" +Defines the views for the API +""" + +from django.shortcuts import render +from rest_framework import viewsets +from .serializers import SportListSerializer, CriterionListSerializer +from .models import Sport, Criterion # Create your views here. + + +class SportListView(viewsets.ModelViewSet): + """ + A View returning every Sport Object + """ + + serializer_class = SportListSerializer + queryset = Sport.objects.all() + + +class CriterionListView(viewsets.ModelViewSet): + """ + A View returning every Criterion Object + """ + + serializer_class = CriterionListSerializer + queryset = Criterion.objects.all() diff --git a/unisportomat/unisportomat/settings.py b/unisportomat/unisportomat/settings.py index 87cc7f8..1e46314 100644 --- a/unisportomat/unisportomat/settings.py +++ b/unisportomat/unisportomat/settings.py @@ -32,13 +32,16 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ - "quiz.apps.QuizConfig", + # "quiz.apps.QuizConfig", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", + "rest_framework", + "corsheaders", + "quiz", ] MIDDLEWARE = [ @@ -49,6 +52,7 @@ MIDDLEWARE = [ "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", + "corsheaders.middleware.CorsMiddleware", ] ROOT_URLCONF = "unisportomat.urls" @@ -121,3 +125,8 @@ STATIC_URL = "/static/" # https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + +CORS_ORITIN_WHITELIST = [ + "http://localhost:3000", # User Frontend + "http://localhost:4000", # Admin Frontend +] diff --git a/unisportomat/unisportomat/urls.py b/unisportomat/unisportomat/urls.py index 6a11f8a..3705949 100644 --- a/unisportomat/unisportomat/urls.py +++ b/unisportomat/unisportomat/urls.py @@ -14,8 +14,15 @@ Including another URLconf 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include +from rest_framework import routers +from quiz import views + +router = routers.DefaultRouter() +router.register(r"sport-list", views.SportListView, "sport-list") +router.register(r"criterion-list", views.CriterionListView, "criterion-list") urlpatterns = [ path("admin/", admin.site.urls), -] + path("api/admin/", include(router.urls)), +] \ No newline at end of file -- GitLab