From c30d6213bc827c8ebbf599ec42c77e44942a40da Mon Sep 17 00:00:00 2001 From: hartwigja62500 Date: Mon, 10 Dec 2018 17:12:26 +0100 Subject: [PATCH] prakt 8 --- djp/djp/settings.py | 1 + djp/polls/serializers.py | 7 ++++ djp/polls/urls.py | 6 +++- djp/polls/views.py | 58 ++++++++++++++++++++++++++++++++-- djp/templates/polls/index.html | 11 ++++--- 5 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 djp/polls/serializers.py diff --git a/djp/djp/settings.py b/djp/djp/settings.py index c6bf341..e66af90 100644 --- a/djp/djp/settings.py +++ b/djp/djp/settings.py @@ -31,6 +31,7 @@ ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ + 'rest_framework', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/djp/polls/serializers.py b/djp/polls/serializers.py new file mode 100644 index 0000000..3e94afe --- /dev/null +++ b/djp/polls/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/djp/polls/urls.py b/djp/polls/urls.py index 5007a78..e006039 100644 --- a/djp/polls/urls.py +++ b/djp/polls/urls.py @@ -1,4 +1,5 @@ -from django.conf.urls import url, include, re_path +from django.conf.urls import url, include +from django.urls import path @@ -8,4 +9,7 @@ from . import views urlpatterns = [ url(r'^$', views.index, name='index'), url('new', views.new, name='new'), + path('delete/', views.delete, name='delete'), + path('notices/', views.notice_list), + path('notices//', views.notice_detail), ] diff --git a/djp/polls/views.py b/djp/polls/views.py index 2710d9d..fa4f9fd 100644 --- a/djp/polls/views.py +++ b/djp/polls/views.py @@ -1,12 +1,16 @@ -from django.http import HttpResponse +from django.http import HttpResponse, JsonResponse from django.shortcuts import render, redirect import time from django.contrib.auth.decorators import login_required +from django.contrib.admin.views.decorators import staff_member_required from polls.forms import NoticeForm from django.utils import timezone from datetime import timedelta from polls.models import Notice - +from polls.serializers import NoticeSerializer +from rest_framework.renderers import JSONRenderer +from rest_framework.parsers import JSONParser +from django.views.decorators.csrf import csrf_exempt def index(request): context = {'now' : time.strftime('%H:%M:%S', time.localtime()), 'posts' : Notice.objects.all() } @@ -16,6 +20,56 @@ def index(request): # print(n.notice_title) return render(request, 'polls/index.html', context) +@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 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, status=201) + return JsonResponse(serializer.errors, status=400) + + elif request.method == 'DELETE': + notice.delete() + return HttpResponse(status=204) + + return HttpResponse(status=405) + + +@staff_member_required +def delete(request, deleteId=None): + if deleteId != None: + deleteNotice = Notice.objects.get(id=deleteId) + if deleteNotice != None: + deleteNotice.delete() + return redirect('index') + @login_required def new(request): if request.method == "POST": diff --git a/djp/templates/polls/index.html b/djp/templates/polls/index.html index 367a294..9ccc6a6 100644 --- a/djp/templates/polls/index.html +++ b/djp/templates/polls/index.html @@ -10,16 +10,19 @@ Index

Index der Polls-Applikation

{% for post in posts %} -

{{ post.notice_title }} {{ post.notice_text }} - delete message

- +

{{ post.notice_title }} {{ post.notice_text }}

+

delete message

{% endfor %}

Neue Nachricht

-

Abmelden

+ {% if user.is_authenticated %} +

Abmelden

+ {% endif %} + {% endblock %}