diff --git a/PR/settings.py b/PR/settings.py index 1b941c0..fef5317 100644 --- a/PR/settings.py +++ b/PR/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'rest_framework', ] MIDDLEWARE = [ diff --git a/polls/migrations/0001_initial.py b/polls/migrations/0001_initial.py new file mode 100644 index 0000000..238084b --- /dev/null +++ b/polls/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.7 on 2019-11-30 16:27 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Notice', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('notice_title', models.CharField(max_length=80)), + ('notice_text', models.CharField(max_length=400)), + ('pub_start', models.DateTimeField()), + ('pub_end', models.DateTimeField()), + ], + ), + ] diff --git a/polls/migrations/__init__.py b/polls/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/polls/models.py b/polls/models.py index b6f4ac5..f52e98e 100644 --- a/polls/models.py +++ b/polls/models.py @@ -5,4 +5,6 @@ class Notice(models.Model): notice_title = models.CharField(max_length=80) notice_text = models.CharField(max_length=400) pub_start = models.DateTimeField() - pub_end = models.DateTimeField() \ No newline at end of file + pub_end = models.DateTimeField() + + #neues model python migration \ No newline at end of file diff --git a/polls/serializers.py b/polls/serializers.py new file mode 100644 index 0000000..816e2c6 --- /dev/null +++ b/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', 'pub_start', 'pub_end') diff --git a/polls/urls.py b/polls/urls.py index d8844b8..6086fad 100644 --- a/polls/urls.py +++ b/polls/urls.py @@ -26,6 +26,11 @@ urlpatterns = [ path('welcome', views.welcome_seite), path('home', views.welcome_seite), path('about', views.about_seite), - path('delete/', views.delete, name ='delete') + path('delete/', views.delete, name ='delete'), #url(r'^new', views.new, name='new'), + path('notices/', views.notice_list), + path('notices//', views.notice_detail), + + + ] diff --git a/polls/views.py b/polls/views.py index 49b7edd..9f6bc51 100644 --- a/polls/views.py +++ b/polls/views.py @@ -1,9 +1,17 @@ -from django.http import HttpResponse from django.shortcuts import render,redirect from .models import Notice from django.utils import timezone import logging + +#Pr8 +from django.views.decorators.csrf import csrf_exempt +from django.http import HttpResponse,JsonResponse from polls.forms import NoticeForm +from polls.models import Notice +from polls.serializers import NoticeSerializer +from rest_framework.parsers import JSONParser +#XXXX + # Create your views here. logger = None @@ -28,21 +36,23 @@ def index(request): #context = {"notices" : notices} return render(request, 'polls/notice.html',{"notices" : notices}) -#def new(request): - # return render(request, 'polls/edit.html') + +#login_required def new(request): if request.method == "POST": form = NoticeForm(request.POST) if form.is_valid(): newNotice = Notice(notice_title=form.cleaned_data['title'], - notice_text=form.cleaned_data['text'], - pub_start=form.cleaned_data['start'], - pub_end=form.cleaned_data['end']) + notice_text=form.cleaned_data['text'], + #pub_start=form.cleaned_data['start'], + pub_start= timezone.now(), + pub_end=form.cleaned_data['end']) newNotice.save() return redirect('index') context = {'form': NoticeForm()} return render(request, 'polls/edit.html', context) +#staff_member_required def delete(request, deleteId = None): if deleteId != None: delNotice = Notice.objects.get(id=deleteId) @@ -54,4 +64,42 @@ def welcome_seite(request): return render(request, 'polls/index.html') def about_seite(request): - return render(request, 'polls/about.html') \ No newline at end of file + return render(request, 'polls/about.html') + +#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().parser(request) + serializer = NoticeSerializer(data=data) + if serializer.is_valid(): + serializer.save() + return JsonResponse(serializer.data, status=201) + return JsonResponse(serializer.errors, status=400) + +#csrf_exempt +def notice_detail(request, id): + try: + notice = Notice.objects.get(id =id) + except Notice.DoesNotExist: + 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)