From 22b694da7ddfbb616e7d6cfb432e919685d43c98 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 24 Oct 2017 19:17:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=B8=D0=B3=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D1=81=D1=82=D0=B0=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/migrations/0003_auto_20171024_1915.py | 51 +++++++++++++++++++ library/models.py | 10 ++-- library/serializers.py | 7 +++ library/urls.py | 1 + library/views.py | 18 ++++++- 5 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 library/migrations/0003_auto_20171024_1915.py diff --git a/library/migrations/0003_auto_20171024_1915.py b/library/migrations/0003_auto_20171024_1915.py new file mode 100644 index 0000000..fbf5123 --- /dev/null +++ b/library/migrations/0003_auto_20171024_1915.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-24 19:15 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('library', '0002_remove_article_all_views'), + ] + + operations = [ + migrations.RenameField( + model_name='article', + old_name='head_description', + new_name='description', + ), + migrations.RenameField( + model_name='article', + old_name='preview_img', + new_name='image', + ), + migrations.RemoveField( + model_name='article', + name='css', + ), + migrations.RemoveField( + model_name='article', + name='head_title', + ), + migrations.RemoveField( + model_name='article', + name='js', + ), + migrations.RemoveField( + model_name='article', + name='page', + ), + migrations.RemoveField( + model_name='article', + name='preview', + ), + migrations.AddField( + model_name='article', + name='url', + field=models.URLField(default='', verbose_name='url страницы'), + preserve_default=False, + ), + ] diff --git a/library/models.py b/library/models.py index 1da43eb..1211db3 100755 --- a/library/models.py +++ b/library/models.py @@ -20,18 +20,14 @@ class ArticleSection(models.Model): class Article(models.Model): public = models.BooleanField(verbose_name='Опубликовать', default=True) slug = models.SlugField(max_length=255, editable=False, blank=True, default='', unique=True) - head_title = models.CharField(verbose_name='Заголовок для соц сетей', max_length=255, blank=True, null=True) - head_description = models.CharField(verbose_name='Описание в заголовке для соц сетей', max_length=255, blank=True, null=True) + description = models.CharField(verbose_name='Описание в заголовке для соц сетей', max_length=255, blank=True, null=True) head_image = models.ImageField(verbose_name='Картинка для соц сетей', upload_to='library', blank=True, null=True) title = models.CharField(verbose_name='Заголовок', max_length=255) section = models.ForeignKey(to=ArticleSection, verbose_name='Раздел', null=True) - preview = models.TextField(verbose_name='Превьюшка', blank=True, default='') - preview_img = models.ImageField(verbose_name='Превьюшка заливки', upload_to='library', blank=True, null=True) - page = models.TextField(verbose_name='PAGE') - css = models.TextField(verbose_name='CSS', blank=True, default='', help_text='Можно добавлять все, но только исправить http на https') - js = models.TextField(verbose_name='JS', blank=True, default='', help_text='Удалить bootstrap, jquery и заменить http на https') + image = models.ImageField(verbose_name='Превьюшка заливки', upload_to='library', blank=True, null=True) date = models.DateTimeField(verbose_name='Дата публикации', default=datetime.datetime.now, editable=False) tags = models.ManyToManyField(to='Tags', verbose_name='Теги', blank=True) + url = models.URLField(verbose_name='url страницы') def __str__(self): return '%s' % self.title diff --git a/library/serializers.py b/library/serializers.py index 6133907..d70d0fa 100644 --- a/library/serializers.py +++ b/library/serializers.py @@ -18,3 +18,10 @@ class ArticleSerializer(serializers.ModelSerializer): @staticmethod def get_section(self): return self.section.name if self.section else 'undefined' + + +class ArticleDetailSerializer(ArticleSerializer): + + class Meta: + model = Article + exclude = ('id', 'public',) diff --git a/library/urls.py b/library/urls.py index 0bf04dd..f104162 100644 --- a/library/urls.py +++ b/library/urls.py @@ -2,5 +2,6 @@ from django.conf.urls import url from library import views urlpatterns = [ + url(r'(?P[-\w]+)/$', views.LibraryDetailView.as_view()), url(r'$', views.LibraryListView.as_view()), ] \ No newline at end of file diff --git a/library/views.py b/library/views.py index c5073a0..7996071 100644 --- a/library/views.py +++ b/library/views.py @@ -3,7 +3,7 @@ from rest_framework.response import Response from rest_framework.views import APIView from library.models import Article -from library.serializers import ArticleSerializer +from library.serializers import ArticleSerializer, ArticleDetailSerializer class LibraryListView(APIView): @@ -11,4 +11,18 @@ class LibraryListView(APIView): status_code = 200 def get(self, request): - return Response([ArticleSerializer(i).data for i in Article.objects.filter(public=True)], self.status_code) \ No newline at end of file + return Response([ArticleSerializer(i).data for i in Article.objects.filter(public=True)], self.status_code) + + +class LibraryDetailView(APIView): + renderer_classes = (JSONRenderer,) + status_code = 200 + + def get(self, request, slug): + try: + article = Article.objects.get(slug=slug) + if not article.public: + return Response('Article not published', 403) + return Response(ArticleDetailSerializer(article).data, self.status_code) + except Article.DoesNotExist: + return Response("Article doesn't exist", status=404) \ No newline at end of file