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