From 6a55fa73949a8089107bb3b6d02d75ece03948ca Mon Sep 17 00:00:00 2001 From: Sally Date: Mon, 17 Dec 2018 22:27:24 +0100 Subject: [PATCH] Solution of 08 --- MEIM_Lsg/settings.py | 3 ++- posts/serializers.py | 7 +++++++ posts/urls.py | 6 +++--- posts/views.py | 47 +++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 posts/serializers.py diff --git a/MEIM_Lsg/settings.py b/MEIM_Lsg/settings.py index 424cdd6..ac9681d 100644 --- a/MEIM_Lsg/settings.py +++ b/MEIM_Lsg/settings.py @@ -37,7 +37,8 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'posts.apps.PostsConfig' #you could also add 'posts' to register everything in your app + 'posts.apps.PostsConfig', #you could also add 'posts' to register everything in your app + 'rest_framework' ] diff --git a/posts/serializers.py b/posts/serializers.py new file mode 100644 index 0000000..3e94afe --- /dev/null +++ b/posts/serializers.py @@ -0,0 +1,7 @@ +from rest_framework import serializers +from .models import Notice + +class NoticeSerializer(serializers.ModelSerializer): + class Meta: + model = Notice + fields = ('id', 'notice_title', 'notice_text', 'pub_start', 'pub_end') \ No newline at end of file diff --git a/posts/urls.py b/posts/urls.py index ba4c276..aa0d483 100644 --- a/posts/urls.py +++ b/posts/urls.py @@ -4,8 +4,8 @@ from django.urls import path, re_path urlpatterns = [ # use re_path for regex (.*) - this regex accepts anything - see https://docs.python.org/3/library/re.html for more path('', views.home, name='index'), - re_path('delete/(?P\d+)/$', views.delete, name='delete'), - re_path('(?P.*)/$', views.home, name='textausgabe'), + path('delete/', views.delete, name='delete'), path('new', views.new, name='new'), - # only accept numbers ^[0-9]*$ + path('notices/', views.notice_list, name='index'), + path('notices/', views.notice_detail, name='delete'), ] \ No newline at end of file diff --git a/posts/views.py b/posts/views.py index b56ffa9..6ab9fd3 100644 --- a/posts/views.py +++ b/posts/views.py @@ -1,10 +1,15 @@ +from django.http import JsonResponse, HttpResponse from django.shortcuts import render, redirect from datetime import timedelta from django.utils import timezone +from rest_framework.parsers import JSONParser +from django.views.decorators.csrf import csrf_exempt + from posts.models import Notice from posts.forms import NoticeForm from django.contrib.auth.decorators import login_required from django.contrib.admin.views.decorators import staff_member_required +from posts.serializers import NoticeSerializer # Create your views here. @@ -40,4 +45,44 @@ def new(request): def delete(request, value): notice = Notice.objects.get(id = value) notice.delete() - return redirect('index') \ No newline at end of file + return redirect('index') + +@csrf_exempt +def notice_list(request): + if request.method == "GET": + notices = Notice.objects.all() + serializer = NoticeSerializer(notices, many=True) + return JsonResponse(serializer.data, safe=False) + elif request.method == "POST": + data = JSONParser().parse(request) + serializer = NoticeSerializer(data=data) + if serializer.is_valid(): + serializer.save() + return JsonResponse(serializer.data, status=201) + return JsonResponse(serializer.errors, status=400) + return HttpResponse(status=405) + +@csrf_exempt +def notice_detail(request, id): + try: + notice = Notice.objects.get(id=id) + except: + return HttpResponse(status=404) + + if request.method == 'GET': + serializer = NoticeSerializer(notice) + return JsonResponse(serializer.data) + + elif request.method == 'PUT': + data = JSONParser().parse(request) + serializer = NoticeSerializer(notice, data=data) + if serializer.is_valid(): + serializer.save() + return JsonResponse(serializer.data) + return JsonResponse(serializer.errors, status=400) + + elif request.method == 'DELETE': + notice.delete() + return HttpResponse(status=204) + + return HttpResponse(status=405) \ No newline at end of file