diff --git a/requirements.txt b/requirements.txt index 1504b1f6e11eb79cbd4060da72812a085792855a..4634623558f4ef01fca555f1ff5ccf511518cd5b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,4 +9,6 @@ requests==2.25.1 soupsieve==2.2.1 sqlparse==0.4.1 urllib3==1.26.4 -Pillow==8.2.0 \ No newline at end of file +Pillow==8.2.0 +django-cors-headers==3.7.0 +djangorestframework==3.12.4 diff --git a/unisportomat/quiz/admin.py b/unisportomat/quiz/admin.py index d8fd65725396d0209f0d09f513fc3187cf807535..c3e5d6568c072bcb6891aedb274a5e0ec7f3333d 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 0000000000000000000000000000000000000000..9ae6987e07ac762c5f5f4dc4768cf8926eba2b5c --- /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") diff --git a/unisportomat/quiz/views.py b/unisportomat/quiz/views.py index 4748ab8002b6a5c04eb7103b520ecf4a50ffdeed..ce6602ab7f47da71c0cc8ed0cd76f5e018d4450f 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): # pylint: disable=too-many-ancestors + """ + A View returning every Sport Object + """ + + serializer_class = SportListSerializer + queryset = Sport.objects.all() + + +class CriterionListView(viewsets.ModelViewSet): # pylint: disable=too-many-ancestors + """ + 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 87cc7f864146898a5321cc23d793ed6dd48a915b..1e46314375fb8545697ddb902f87bc66606ff270 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 6a11f8a60766e41893a573be88f18d3f4a3e5040..9e2516382c8b1d9c5ec515c5af440259289c2eb5 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)), ]