diff --git a/news/settings.py b/news/settings.py index 39a0701..981a3cf 100644 --- a/news/settings.py +++ b/news/settings.py @@ -37,7 +37,8 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'posts.apps.PostsConfig' + 'posts.apps.PostsConfig', + 'rest_framework' ] MIDDLEWARE = [ diff --git a/news/urls.py b/news/urls.py index 7656ddc..d9ca8aa 100644 --- a/news/urls.py +++ b/news/urls.py @@ -21,5 +21,5 @@ from posts import views urlpatterns = [ path('posts/', include('posts.urls')), path('admin/', admin.site.urls), - + path('accounts/', include('django.contrib.auth.urls')) ] diff --git a/posts/serializers.py b/posts/serializers.py new file mode 100644 index 0000000..6b6d99f --- /dev/null +++ b/posts/serializers.py @@ -0,0 +1,10 @@ +from rest_framework import serializers + +from posts.models import Notice + + +class NoticeSerializer(serializers.ModelSerializer): + class Meta: + model = Notice + fields = ('id', 'notice_title', 'notice_text', 'pub_start', 'pub_end') + diff --git a/posts/templates/posts/edit.html b/posts/templates/posts/edit.html index 147a573..a20fc7d 100644 --- a/posts/templates/posts/edit.html +++ b/posts/templates/posts/edit.html @@ -1,11 +1,14 @@ {% extends "base.html" %} {% block content %} -

Neue Nachricht

-
- {% csrf_token %} - {{ form.as_p }} - -
- +

Neue Nachricht

+
+ {% csrf_token %} + {{ form.as_p }} + +
+ {% if user.is_authenticated %} +

Abmelden

+ {% endif %} {% endblock %} \ No newline at end of file diff --git a/posts/templates/posts/notice.html b/posts/templates/posts/notice.html index 43e8f41..4f4f6ce 100644 --- a/posts/templates/posts/notice.html +++ b/posts/templates/posts/notice.html @@ -6,7 +6,7 @@
-
+
{% for notice in allnotice %}
{{ notice.notice_title }}

{{ notice.notice_text |linebreaks }}

@@ -17,4 +17,10 @@
-{% endblock %} \ No newline at end of file +{% endblock %} + + \ No newline at end of file diff --git a/posts/templates/registration/login.html b/posts/templates/registration/login.html new file mode 100644 index 0000000..b7288ae --- /dev/null +++ b/posts/templates/registration/login.html @@ -0,0 +1,32 @@ +{% extends 'base.html' %} +{% block title %} + Login +{% endblock %} +{% block content %} + + {% if next %} + {% if user.is_authenticated %} +

Your account doesn't have access to this page. To proceed, + please login with an account that has access.

+ {% else %} +

Please login to see this page.

+ {% endif %} + {% endif %} +
+ {% csrf_token %} +
+ {{ form.username.label_tag }} +

{{ form.username }}

+
+
+

{{ form.password.label_tag }}

+

{{ form.password }}

+
+ +
+ + +
+ +
+{% endblock %} \ No newline at end of file diff --git a/posts/urls.py b/posts/urls.py index 7d52370..5577c70 100644 --- a/posts/urls.py +++ b/posts/urls.py @@ -8,5 +8,7 @@ urlpatterns = [ path('home', views.welcome_seite), path('about', views.about_seite), url(r'^new', views.new, name='new'), - path('delete/', views.delete, name ='delete') + path('delete/', views.delete, name ='delete'), + path('notices', views.notice_list), + path('notices/', views.notice_detail) ] \ No newline at end of file diff --git a/posts/views.py b/posts/views.py index 9e5a7c5..8673b8e 100644 --- a/posts/views.py +++ b/posts/views.py @@ -1,11 +1,18 @@ -from django.http import HttpResponse +from django.contrib.admin.views.decorators import staff_member_required +from django.contrib.auth.decorators import login_required +from django.http import HttpResponse, JsonResponse from django.shortcuts import render, redirect from django.utils import timezone +from django.views.decorators.csrf import csrf_exempt +from rest_framework.parsers import JSONParser from posts.forms import NoticeForm from posts.models import Notice # Create your views here. +from posts.serializers import NoticeSerializer + + def index(request): notices = Notice.objects.all() notices = notices.filter(pub_start__lte=timezone.now()) @@ -18,6 +25,8 @@ def welcome_seite(request): def about_seite(request): return render(request, 'posts/about.html') + +@login_required def new(request): if request.method == "POST": form = NoticeForm(request.POST) @@ -32,9 +41,48 @@ def new(request): return render(request, 'posts/edit.html', context) +@staff_member_required def delete(request, deleteId = None): if deleteId != None: delNotice = Notice.objects.get(id=deleteId) if delNotice != None: delNotice.delete() 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=201) + + +@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) + + + diff --git a/templates/base.html b/templates/base.html index c1d1357..583c120 100644 --- a/templates/base.html +++ b/templates/base.html @@ -11,21 +11,24 @@ + + + {% block title %}First Django Application{% endblock %}