From 1c502d7f48f592617c24d4da4dbfdacdaab0c928 Mon Sep 17 00:00:00 2001 From: Peter Date: Sat, 9 May 2020 15:02:35 +0000 Subject: [PATCH] =?UTF-8?q?api=20zugriff=20f=C3=BCr=20posts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fet2020/fet2020/settings.py | 3 ++- fet2020/fet2020/urls.py | 9 ++++++++- fet2020/posts/models.py | 16 +++++++++++++--- fet2020/posts/views.py | 14 +++++++++++++- fet2020/requirements.txt | 3 ++- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/fet2020/fet2020/settings.py b/fet2020/fet2020/settings.py index c9250712..db7aea4a 100644 --- a/fet2020/fet2020/settings.py +++ b/fet2020/fet2020/settings.py @@ -41,7 +41,8 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'taggit', 'ckeditor', - 'ckeditor_uploader' + 'ckeditor_uploader', + 'rest_framework' ] MIDDLEWARE = [ diff --git a/fet2020/fet2020/urls.py b/fet2020/fet2020/urls.py index bad41dfd..32da436e 100644 --- a/fet2020/fet2020/urls.py +++ b/fet2020/fet2020/urls.py @@ -18,10 +18,17 @@ from django.urls import path, include from django.conf.urls.static import static from django.conf import settings from . import views +from posts.views import PostViewSet +from rest_framework import routers + +router = routers.DefaultRouter() +router.register(r'posts', PostViewSet) + urlpatterns = [ path('posts/',include('posts.urls')), path('admin/', admin.site.urls), path('', views.index, name='home'), path('index.html', views.index, name='home'), - path('ckeditor/', include('ckeditor_uploader.urls')) + path('ckeditor/', include('ckeditor_uploader.urls')), + path('api/', include(router.urls)) ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index 85a43ee3..9e218acf 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -2,10 +2,13 @@ from django.db import models from django.contrib.auth.models import User from taggit.managers import TaggableManager from django.utils.text import slugify +from django.urls import reverse + #from ckeditor_uploader import RichTextUploadingField import django import uuid import re +from rest_framework import serializers # Create your models here. class Post(models.Model): @@ -40,7 +43,8 @@ class Post(models.Model): # TimeStamps date_modified=models.DateTimeField(auto_now=True) date_created=models.DateTimeField(auto_now_add=True) - + + def get_tags(self): return ",".join(self.tags.names()) @@ -53,7 +57,9 @@ class Post(models.Model): def key(self): return self.slug or self.id - + @property + def url(self): + return reverse('posts.show', kwargs={"id":self.slug}) def save(self, *args, **kwargs): if self.id is None and (self.slug is None or self.slug ==""): self.slug=slugify(self.title) @@ -65,6 +71,10 @@ class Post(models.Model): - +class PostSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Post + fields = ['slug','title', 'body','url', 'legacy_id'] + diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py index d88dcd18..69cc1e7c 100644 --- a/fet2020/posts/views.py +++ b/fet2020/posts/views.py @@ -2,8 +2,10 @@ from django.shortcuts import render from django.http import HttpResponse from collections import deque -from .models import Post +from .models import Post, PostSerializer from taggit.models import Tag +from rest_framework import viewsets +from rest_framework import permissions # Create your views here. def index(request): @@ -18,3 +20,13 @@ def show(request,id=None): elif id != ""and not id is None: p=Post.objects.get(slug=(id)) return render(request, 'posts/show.html', {"post":p}) + + +class PostViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows users to be viewed or edited. + """ + queryset = Post.objects.all().order_by('-public_date') + serializer_class = PostSerializer + permission_classes = [permissions.IsAuthenticated] + lookup_field='slug' \ No newline at end of file diff --git a/fet2020/requirements.txt b/fet2020/requirements.txt index 0973516c..4da16394 100644 --- a/fet2020/requirements.txt +++ b/fet2020/requirements.txt @@ -1,4 +1,5 @@ django django-taggit django-ckeditor -Pillow \ No newline at end of file +Pillow +djangorestframework \ No newline at end of file