From 17a3347a88fa76a26cad4935a35ad1a60fa0eeb9 Mon Sep 17 00:00:00 2001 From: gzbender Date: Thu, 16 Aug 2018 19:33:45 +0500 Subject: [PATCH] LIL-582 thumbnails, ip save in likes and etc --- api/v1/serializers/content.py | 4 ++++ api/v1/serializers/course.py | 5 ++++- apps/content/models.py | 6 ++++++ apps/course/migrations/0042_like_ip.py | 18 ++++++++++++++++++ apps/course/models.py | 1 + project/settings.py | 1 + requirements.txt | 2 ++ web/src/components/blocks/ContestWork.vue | 2 +- web/src/sass/_common.sass | 2 +- 9 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 apps/course/migrations/0042_like_ip.py diff --git a/api/v1/serializers/content.py b/api/v1/serializers/content.py index aff24dd5..c17ca15d 100644 --- a/api/v1/serializers/content.py +++ b/api/v1/serializers/content.py @@ -85,12 +85,16 @@ class ImageObjectSerializer(serializers.ModelSerializer): image = Base64ImageField( required=True, allow_empty_file=False, allow_null=False, read_only=False, ) + image_thumbnail = Base64ImageField( + required=True, allow_empty_file=False, allow_null=False, read_only=False, + ) class Meta: model = ImageObject fields = ( 'id', 'image', + 'image_thumbnail', 'created_at', 'update_at', ) diff --git a/api/v1/serializers/course.py b/api/v1/serializers/course.py index 573b0f76..fe06ca53 100644 --- a/api/v1/serializers/course.py +++ b/api/v1/serializers/course.py @@ -1,3 +1,5 @@ +from ipware import get_client_ip + from rest_framework import serializers from rest_framework.validators import UniqueValidator @@ -88,13 +90,14 @@ class LikeCreateSerializer(serializers.ModelSerializer): return Like() obj_type = validated_data.pop('obj_type') obj_id = validated_data.pop('obj_id') + client_ip, is_routable = get_client_ip(self.context['request']) if obj_type == self.OBJ_TYPE_CONTEST_WORK: contest_work = ContestWork.objects.get(pk=obj_id) # FIXME in prod: fixed if contest_work.user == user or contest_work.likes.filter(user=user).exists(): # if contest_work.likes.filter(user=user).exists(): return Like() - like = Like.objects.create(user=user) + like = Like.objects.create(user=user, ip=client_ip) contest_work.likes.add(like) return like diff --git a/apps/content/models.py b/apps/content/models.py index bbf023d8..197e1e7d 100644 --- a/apps/content/models.py +++ b/apps/content/models.py @@ -2,6 +2,8 @@ from urllib.parse import urlparse from django.db import models from django.contrib.auth import get_user_model from django.urls import reverse_lazy +from imagekit.models import ImageSpecField +from imagekit.processors import ResizeToCover from polymorphic.models import PolymorphicModel @@ -11,6 +13,10 @@ User = get_user_model() class ImageObject(models.Model): image = models.ImageField('Изображение', upload_to='content/imageobject') + image_thumbnail = ImageSpecField(source='image', + processors=[ResizeToCover(300, 200, False)], + format='JPEG', + options={'quality': 85}) created_at = models.DateTimeField(auto_now_add=True) update_at = models.DateTimeField(auto_now=True) diff --git a/apps/course/migrations/0042_like_ip.py b/apps/course/migrations/0042_like_ip.py new file mode 100644 index 00000000..388ab03f --- /dev/null +++ b/apps/course/migrations/0042_like_ip.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.6 on 2018-08-16 16:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('course', '0041_auto_20180813_1306'), + ] + + operations = [ + migrations.AddField( + model_name='like', + name='ip', + field=models.GenericIPAddressField(blank=True, null=True), + ), + ] diff --git a/apps/course/models.py b/apps/course/models.py index 6492b999..39eed28e 100644 --- a/apps/course/models.py +++ b/apps/course/models.py @@ -22,6 +22,7 @@ User = get_user_model() class Like(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) + ip = models.GenericIPAddressField(blank=True, null=True) created_at = models.DateTimeField(auto_now_add=True) update_at = models.DateTimeField(auto_now=True) diff --git a/project/settings.py b/project/settings.py index 646c94ed..b9232bcd 100644 --- a/project/settings.py +++ b/project/settings.py @@ -56,6 +56,7 @@ INSTALLED_APPS = [ 'sorl.thumbnail', 'raven.contrib.django.raven_compat', 'django_user_agents', + 'imagekit', ] + [ 'apps.auth.apps', 'apps.user', diff --git a/requirements.txt b/requirements.txt index 05894ddd..36fd2182 100644 --- a/requirements.txt +++ b/requirements.txt @@ -28,4 +28,6 @@ git+https://github.com/ivlevdenis/python-instagram.git django-user-agents==0.3.2 user-agents==1.1.0 ua-parser==0.8.0 +django-ipware +django-imagekit diff --git a/web/src/components/blocks/ContestWork.vue b/web/src/components/blocks/ContestWork.vue index 3472b11d..617b9fab 100644 --- a/web/src/components/blocks/ContestWork.vue +++ b/web/src/components/blocks/ContestWork.vue @@ -1,7 +1,7 @@