REST
This commit is contained in:
Oliver 2023-12-11 13:04:28 +01:00
parent be03e50cf4
commit 858c2fe0c3
7 changed files with 81 additions and 2 deletions

12
create_notice.http Normal file
View File

@ -0,0 +1,12 @@
POST http://127.0.0.1:8000/polls/notices/ HTTP/1.1
Content-Type: application/json
{
"notice_title": "Notice via API",
"notice_text": "This is a notice created via the API",
"pub_start": "2019-01-01T00:00:00Z",
"pub_end": "2119-12-31T23:59:59Z",
"user_id": 1
}
###

6
delete_notice.http Normal file
View File

@ -0,0 +1,6 @@
DELETE http://127.0.0.1:8000/polls/notices/15/ HTTP/1.1
Content-Type: application/json
{}
###

View File

@ -29,6 +29,7 @@ ALLOWED_HOSTS = []
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [
'rest_framework',
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',

9
polls/serializers.py Normal file
View File

@ -0,0 +1,9 @@
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', 'user_id']

View File

@ -5,6 +5,9 @@ urlpatterns = [
path('', views.index, name='index'), path('', views.index, name='index'),
path('new', views.new, name='new'), path('new', views.new, name='new'),
path('delete/<int:deleteId>', views.delete, name='delete'), path('delete/<int:deleteId>', views.delete, name='delete'),
path('notices/', views.notice_list, name='notice_list'),
path('notices/<int:id>/', views.notice_detail, name='notice_detail'),
] ]

View File

@ -1,10 +1,17 @@
from django.http import JsonResponse
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from rest_framework.parsers import JSONParser
from .models import Notice from .models import Notice
from django.utils import timezone from django.utils import timezone
from .forms import NoticeForm from .forms import NoticeForm
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
from django.contrib import messages from django.contrib import messages
from .serializers import NoticeSerializer
@login_required @login_required
@ -34,13 +41,14 @@ def delete(request, deleteId=None):
notice = Notice.objects.get(pk=deleteId) notice = Notice.objects.get(pk=deleteId)
if request.user.id == notice.user_id or request.user.is_staff: if request.user.id == notice.user_id or request.user.is_staff:
notice.delete() notice.delete()
messages.success(request, f"Nachricht gelöscht") messages.success(request, f"Nachricht cht")
else: else:
messages.warning(request, f"Keine Berechtigung") messages.warning(request, f"Keine Berechtigung")
except: except:
messages.warning(request, f"Nachricht nicht gefunden") messages.warning(request, f"Nachricht nicht gefunden")
return redirect('index') return redirect('index')
def index(request): def index(request):
notices = Notice.objects.all() notices = Notice.objects.all()
notices = notices.filter(pub_start__lte=timezone.now()) notices = notices.filter(pub_start__lte=timezone.now())
@ -48,3 +56,42 @@ def index(request):
context = {'notices': notices} context = {'notices': notices}
return render(request, 'polls/index.html', context) 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 JsonResponse(serializer.errors)
else:
return JsonResponse({'error': 'GET or POST request required'}, status=400)
@csrf_exempt
def notice_detail(request, id):
try:
notice = Notice.objects.get(pk=id)
except Notice.DoesNotExist:
return JsonResponse({'error': 'Notice not found'}, 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 JsonResponse({'message': 'Notice was deleted successfully!'}, status=204)
else:
return JsonResponse({'error': 'GET, PUT or DELETE request required'}, status=400)

View File

@ -1 +1,2 @@
Django>=4.2.6 Django>=4.2.6
djangorestframework>=3.14.0