Миграции статей

feature/fix_generate_pass
Andrey 8 years ago
parent 2ca3c10df6
commit 22b694da7d
  1. 51
      library/migrations/0003_auto_20171024_1915.py
  2. 10
      library/models.py
  3. 7
      library/serializers.py
  4. 1
      library/urls.py
  5. 18
      library/views.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,
),
]

@ -20,18 +20,14 @@ class ArticleSection(models.Model):
class Article(models.Model): class Article(models.Model):
public = models.BooleanField(verbose_name='Опубликовать', default=True) public = models.BooleanField(verbose_name='Опубликовать', default=True)
slug = models.SlugField(max_length=255, editable=False, blank=True, default='', unique=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) description = models.CharField(verbose_name='Описание в заголовке для соц сетей', max_length=255, blank=True, null=True)
head_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) head_image = models.ImageField(verbose_name='Картинка для соц сетей', upload_to='library', blank=True, null=True)
title = models.CharField(verbose_name='Заголовок', max_length=255) title = models.CharField(verbose_name='Заголовок', max_length=255)
section = models.ForeignKey(to=ArticleSection, verbose_name='Раздел', null=True) section = models.ForeignKey(to=ArticleSection, verbose_name='Раздел', null=True)
preview = models.TextField(verbose_name='Превьюшка', blank=True, default='') image = models.ImageField(verbose_name='Превьюшка заливки', upload_to='library', blank=True, null=True)
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')
date = models.DateTimeField(verbose_name='Дата публикации', default=datetime.datetime.now, editable=False) date = models.DateTimeField(verbose_name='Дата публикации', default=datetime.datetime.now, editable=False)
tags = models.ManyToManyField(to='Tags', verbose_name='Теги', blank=True) tags = models.ManyToManyField(to='Tags', verbose_name='Теги', blank=True)
url = models.URLField(verbose_name='url страницы')
def __str__(self): def __str__(self):
return '%s' % self.title return '%s' % self.title

@ -18,3 +18,10 @@ class ArticleSerializer(serializers.ModelSerializer):
@staticmethod @staticmethod
def get_section(self): def get_section(self):
return self.section.name if self.section else 'undefined' return self.section.name if self.section else 'undefined'
class ArticleDetailSerializer(ArticleSerializer):
class Meta:
model = Article
exclude = ('id', 'public',)

@ -2,5 +2,6 @@ from django.conf.urls import url
from library import views from library import views
urlpatterns = [ urlpatterns = [
url(r'(?P<slug>[-\w]+)/$', views.LibraryDetailView.as_view()),
url(r'$', views.LibraryListView.as_view()), url(r'$', views.LibraryListView.as_view()),
] ]

@ -3,7 +3,7 @@ from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from library.models import Article from library.models import Article
from library.serializers import ArticleSerializer from library.serializers import ArticleSerializer, ArticleDetailSerializer
class LibraryListView(APIView): class LibraryListView(APIView):
@ -11,4 +11,18 @@ class LibraryListView(APIView):
status_code = 200 status_code = 200
def get(self, request): def get(self, request):
return Response([ArticleSerializer(i).data for i in Article.objects.filter(public=True)], self.status_code) 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)
Loading…
Cancel
Save