diff --git a/apps/advertisement/admin.py b/apps/advertisement/admin.py index 846f6b40..74bc6cdc 100644 --- a/apps/advertisement/admin.py +++ b/apps/advertisement/admin.py @@ -1 +1,9 @@ -# Register your models here. +"""Admin models for app advertisement""" +from django.contrib import admin + +from advertisement import models + + +@admin.register(models.Advertisement) +class AdvertisementModelAdmin(admin.ModelAdmin): + """Admin model for model Advertisement""" diff --git a/apps/advertisement/migrations/0001_initial.py b/apps/advertisement/migrations/0001_initial.py new file mode 100644 index 00000000..f10e14d4 --- /dev/null +++ b/apps/advertisement/migrations/0001_initial.py @@ -0,0 +1,34 @@ +# Generated by Django 2.2.4 on 2019-08-26 12:24 + +from django.db import migrations, models +import django.utils.timezone +import easy_thumbnails.fields +import utils.methods + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Advertisement', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateTimeField(default=django.utils.timezone.now, editable=False, verbose_name='Date created')), + ('modified', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('image', easy_thumbnails.fields.ThumbnailerImageField(blank=True, default=None, null=True, upload_to=utils.methods.image_path, verbose_name='Image')), + ('url', models.URLField(verbose_name='Ad URL')), + ('width', models.PositiveIntegerField(verbose_name='Block width')), + ('height', models.PositiveIntegerField(verbose_name='Block height')), + ('block_level', models.PositiveSmallIntegerField(choices=[(1, 'Ad block level 1'), (2, 'Ad block level 2'), (3, 'Ad block level 3')], verbose_name='Block level')), + ], + options={ + 'verbose_name': 'Advertisement', + 'verbose_name_plural': 'Advertisement', + }, + ), + ] diff --git a/apps/advertisement/models.py b/apps/advertisement/models.py index 6b202199..75978009 100644 --- a/apps/advertisement/models.py +++ b/apps/advertisement/models.py @@ -1 +1,32 @@ -# Create your models here. +"""Advertisement app models.""" +from django.db import models +from django.utils.translation import gettext_lazy as _ + +from utils.models import ProjectBaseMixin, ImageMixin + + +class Advertisement(ImageMixin, ProjectBaseMixin): + """Advertisement model.""" + + LEVEL_1 = 1 + LEVEL_2 = 2 + LEVEL_3 = 3 + + BLOCK_LEVEL_CHOICES = ( + (LEVEL_1, _('Ad block level 1')), + (LEVEL_2, _('Ad block level 2')), + (LEVEL_3, _('Ad block level 3')) + ) + + url = models.URLField(verbose_name=_('Ad URL')) + width = models.PositiveIntegerField(verbose_name=_('Block width')) + height = models.PositiveIntegerField(verbose_name=_('Block height')) + block_level = models.PositiveSmallIntegerField(choices=BLOCK_LEVEL_CHOICES, + verbose_name=_('Block level')) + + class Meta: + verbose_name = _('Advertisement') + verbose_name_plural = _('Advertisement') + + def __str__(self): + return str(self.url) diff --git a/apps/advertisement/serializers/web.py b/apps/advertisement/serializers/web.py new file mode 100644 index 00000000..4000b1b6 --- /dev/null +++ b/apps/advertisement/serializers/web.py @@ -0,0 +1,19 @@ +"""Serializers for app advertisements""" +from rest_framework import serializers + +from advertisement import models + + +class AdvertisementSerializer(serializers.ModelSerializer): + """Serializer for model Advertisement.""" + + class Meta: + model = models.Advertisement + fields = ( + 'id', + 'url', + 'image', + 'width', + 'height', + 'block_level', + ) diff --git a/apps/advertisement/urls/web.py b/apps/advertisement/urls/web.py new file mode 100644 index 00000000..a2974e9a --- /dev/null +++ b/apps/advertisement/urls/web.py @@ -0,0 +1,10 @@ +"""Advertisement common urlpaths.""" +from django.urls import path + +from advertisement.views import web as views + +app_name = 'advertisement' + +urlpatterns = [ + path('list/', views.AdvertisementListView.as_view(), name='advertisements_list') +] diff --git a/apps/advertisement/views/web.py b/apps/advertisement/views/web.py index 60f00ef0..c8462683 100644 --- a/apps/advertisement/views/web.py +++ b/apps/advertisement/views/web.py @@ -1 +1,14 @@ -# Create your views here. +"""Views for app advertisement""" +from rest_framework import generics +from rest_framework import permissions + +from advertisement import models +from advertisement.serializers import web as serializers + + +class AdvertisementListView(generics.ListAPIView): + """List view for model Advertisement""" + model = models.Advertisement + permission_classes = (permissions.AllowAny, ) + queryset = models.Advertisement.objects.all() + serializer_class = serializers.AdvertisementSerializer diff --git a/project/urls/web.py b/project/urls/web.py index 3d3d77b0..956d0c11 100644 --- a/project/urls/web.py +++ b/project/urls/web.py @@ -22,4 +22,5 @@ urlpatterns = [ path('news/', include('news.urls.web')), path('collection/', include('collection.urls.web')), path('partner/', include('partner.urls.web')), + path('advertisement/', include('advertisement.urls.web')) ]