From 2e11b651a1fe4f9bb9b1e3cb1509d51ce7e59ebb Mon Sep 17 00:00:00 2001 From: Jonka Date: Mon, 17 Dec 2018 16:37:03 +0100 Subject: [PATCH] Zwischenstand des Praktikums: index-Fkt muss noch angepasst werden! --- Django_Project/Django_Project/settings.py | 3 +- Django_Project/posts/forms.py | 13 +++ Django_Project/posts/serializers.py | 7 ++ Django_Project/posts/urls.py | 6 + Django_Project/posts/views.py | 110 ++++++++++++++++-- Django_Project/templates/base.html | 2 +- .../templates/posts/allMessages.html | 33 ++++-- Django_Project/templates/posts/edit.html | 18 +++ Python-Blockkurs/Pong.py | 1 - 9 files changed, 174 insertions(+), 19 deletions(-) create mode 100644 Django_Project/posts/forms.py create mode 100644 Django_Project/posts/serializers.py create mode 100644 Django_Project/templates/posts/edit.html diff --git a/Django_Project/Django_Project/settings.py b/Django_Project/Django_Project/settings.py index b3e626a..ea94e53 100644 --- a/Django_Project/Django_Project/settings.py +++ b/Django_Project/Django_Project/settings.py @@ -33,6 +33,7 @@ ALLOWED_HOSTS = [] INSTALLED_APPS = [ 'posts.apps.PostsConfig', + 'rest_framework', 'django.contrib.admin', 'django.contrib.auth', @@ -107,7 +108,7 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/2.1/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'de-de' TIME_ZONE = 'UTC' diff --git a/Django_Project/posts/forms.py b/Django_Project/posts/forms.py new file mode 100644 index 0000000..f54de00 --- /dev/null +++ b/Django_Project/posts/forms.py @@ -0,0 +1,13 @@ +from django import forms +import datetime + +class NoticeForm(forms.Form): + date_formats = ['%d.%m.%Y', '%d.%m.%y'] + title = forms.CharField(label='Titel', max_length=80) + text = forms.CharField(label='Text', max_length=400) + start = forms.DateField(label='Von', + input_formats=date_formats, + initial=datetime.date.today) + end = forms.DateField(label='Bis', + input_formats=date_formats, + initial=datetime.date.today) \ No newline at end of file diff --git a/Django_Project/posts/serializers.py b/Django_Project/posts/serializers.py new file mode 100644 index 0000000..e46159f --- /dev/null +++ b/Django_Project/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') diff --git a/Django_Project/posts/urls.py b/Django_Project/posts/urls.py index 0706021..9310ce3 100644 --- a/Django_Project/posts/urls.py +++ b/Django_Project/posts/urls.py @@ -1,7 +1,13 @@ from django.conf.urls import include, url from . import views +from django.urls import path, include, re_path urlpatterns = [ url(r'^$', views.index, name="index"), + path("new", views.new, name="new"), + path("delete/", views.delete, name="delete"), + + path('notices/', views.notice_list), + path('notices/', views.notice_detail), ] diff --git a/Django_Project/posts/views.py b/Django_Project/posts/views.py index 3595638..1982e1b 100644 --- a/Django_Project/posts/views.py +++ b/Django_Project/posts/views.py @@ -1,13 +1,109 @@ +from posts.models import Notice +from django.utils import timezone from django.shortcuts import render -from django.http import HttpResponse -# Create your views here. +from django.http import HttpResponse def index(request): #return render(request, 'posts/index.html') - #context = # hier muss Datenbank ausgelesen werden: - # for curr_msg in Notice.objects.all(): - # if (curr_msg.pub_start > datetime.now() and curr_msg.pub_end < date...... - # context += - return render(request, 'posts/allMessages.html') + #-------------------- eigener Versuch --------------------- + + # relevant_notices = Notice.objects.filter(pub_start__lt = timezone.datetime.now()) + # relevant_notices = Notice.objects.filter(pub_end__gt = timezone.datetime.now()) + + # for curr_msg in relevant_notices: + # context['now'] += "TITEL DER NACHRICHT: " + curr_msg.notice_title + "TEXT DER NACHRICHT: " + curr_msg.notice_text + # # unschöne Lösung, da hier ein Fließtext ohne Layout-Möglichkeiten (z.B. backspace zwischen jeder neuen Zeile) entsteht + # # bessere Variante: for-Schleife in das Template (allMessages.html) auslagern + + #------------------ ab hier: schöne Variante -------------------- + + relevant_notices = Notice.objects.all() + relevant_notices = Notice.objects.filter(pub_start__lt=timezone.datetime.now()) + relevant_notices = Notice.objects.filter(pub_end__gt=timezone.datetime.now()) + # all diese Befehle importieren noch NHCTS aus der Datenbank! Sie bauen nur einen SQL-Zugriffs-Befehl auf (mit entsprevchender Filterung) und erst beim Auslesen wird auf Datenbank zugegriffen + + context = { "notices" : relevant_notices } + + return render(request, 'posts/allMessages.html', context) + + +from posts.forms import NoticeForm +from django.shortcuts import redirect + +def new(request): + #return HttpResponse("Eingabe einer neuen Nachricht!") + if request.method == "POST": + eingabeFenster = NoticeForm(request.POST) + if eingabeFenster.is_valid(): + newNotice = Notice(notice_title = eingabeFenster.cleaned_data['title'], + notice_text = eingabeFenster.cleaned_data['text'], + pub_start = eingabeFenster.cleaned_data['start'], + pub_end = eingabeFenster.cleaned_data['end']) + newNotice.save() + return redirect('index') + context = {'form' : NoticeForm() } + return render(request, 'posts/edit.html', context) + +def delete(request, id): + msg_to_delete = Notice.objects.get(id = id) + msg_to_delete.clean() + return redirect('index') + + + +from posts.models import Notice +from posts.serializers import NoticeSerializer +from django.http import JsonResponse +from rest_framework.parsers import JSONParser + +from django.views.decorators.csrf import csrf_exempt + +@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) + else: + return JsonResponse(serializer.errors, status=400) + + else: + 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) + else: + return JsonResponse(serializer.errors, status=400) + + elif request.method == 'DELETE': + notice.delete() + return HttpResponse(status=204) + + else: + return HttpResponse(status=405) + + diff --git a/Django_Project/templates/base.html b/Django_Project/templates/base.html index 83d1708..974377f 100644 --- a/Django_Project/templates/base.html +++ b/Django_Project/templates/base.html @@ -28,7 +28,7 @@ -{% block content %} zzz {% endblock %} +{% block content %} zzz {% endblock %} \ No newline at end of file diff --git a/Django_Project/templates/posts/allMessages.html b/Django_Project/templates/posts/allMessages.html index c5c74c0..267668f 100644 --- a/Django_Project/templates/posts/allMessages.html +++ b/Django_Project/templates/posts/allMessages.html @@ -1,10 +1,25 @@ - - - - - Messages - - - - \ No newline at end of file +{% extends 'base.html' %} + +{% block title %} +News +{% endblock %} + +{% block content %} + +
+ + {% for curr_notice in notices %} +

{{ curr_notice.notice_title }}

+

{{ curr_notice.notice_text }}

+

Löschen

+ {% endfor %} + + + + +

Neue Nachricht

+ +{% endblock %} \ No newline at end of file diff --git a/Django_Project/templates/posts/edit.html b/Django_Project/templates/posts/edit.html new file mode 100644 index 0000000..e49bac2 --- /dev/null +++ b/Django_Project/templates/posts/edit.html @@ -0,0 +1,18 @@ +{% extends "base.html" %} + +{% block title %} +Eingabefenster für neuen instance von "Notice" +{% endblock %} + + +{% block content %} + + +

Neue Nachricht

+
+ {% csrf_token %} + {{ form.as_p }} + +
+ +{% endblock %} \ No newline at end of file diff --git a/Python-Blockkurs/Pong.py b/Python-Blockkurs/Pong.py index e9f71ea..7016965 100644 --- a/Python-Blockkurs/Pong.py +++ b/Python-Blockkurs/Pong.py @@ -60,7 +60,6 @@ def doMovement(): image_rect.centery += move_vector[1] if size_image[0]/2 <= image_rect.centerx <= width-(size_image[0]/2) and size_image[1]/2 <= image_rect.centery <= height-(size_image[1]/2): - pass else: if image_rect.centerx >= width-size_image[0]/2 or image_rect.centerx <= size_image[0]/2: