LIL-582 thumbnails, ip save in likes and etc

remotes/origin/hotfix/LIL-661
gzbender 8 years ago
parent 353980c79e
commit 17a3347a88
  1. 4
      api/v1/serializers/content.py
  2. 5
      api/v1/serializers/course.py
  3. 6
      apps/content/models.py
  4. 18
      apps/course/migrations/0042_like_ip.py
  5. 1
      apps/course/models.py
  6. 1
      project/settings.py
  7. 2
      requirements.txt
  8. 2
      web/src/components/blocks/ContestWork.vue
  9. 2
      web/src/sass/_common.sass

@ -85,12 +85,16 @@ class ImageObjectSerializer(serializers.ModelSerializer):
image = Base64ImageField( image = Base64ImageField(
required=True, allow_empty_file=False, allow_null=False, read_only=False, 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: class Meta:
model = ImageObject model = ImageObject
fields = ( fields = (
'id', 'id',
'image', 'image',
'image_thumbnail',
'created_at', 'created_at',
'update_at', 'update_at',
) )

@ -1,3 +1,5 @@
from ipware import get_client_ip
from rest_framework import serializers from rest_framework import serializers
from rest_framework.validators import UniqueValidator from rest_framework.validators import UniqueValidator
@ -88,13 +90,14 @@ class LikeCreateSerializer(serializers.ModelSerializer):
return Like() return Like()
obj_type = validated_data.pop('obj_type') obj_type = validated_data.pop('obj_type')
obj_id = validated_data.pop('obj_id') 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: if obj_type == self.OBJ_TYPE_CONTEST_WORK:
contest_work = ContestWork.objects.get(pk=obj_id) contest_work = ContestWork.objects.get(pk=obj_id)
# FIXME in prod: fixed # FIXME in prod: fixed
if contest_work.user == user or contest_work.likes.filter(user=user).exists(): if contest_work.user == user or contest_work.likes.filter(user=user).exists():
# if contest_work.likes.filter(user=user).exists(): # if contest_work.likes.filter(user=user).exists():
return Like() return Like()
like = Like.objects.create(user=user) like = Like.objects.create(user=user, ip=client_ip)
contest_work.likes.add(like) contest_work.likes.add(like)
return like return like

@ -2,6 +2,8 @@ from urllib.parse import urlparse
from django.db import models from django.db import models
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.urls import reverse_lazy from django.urls import reverse_lazy
from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToCover
from polymorphic.models import PolymorphicModel from polymorphic.models import PolymorphicModel
@ -11,6 +13,10 @@ User = get_user_model()
class ImageObject(models.Model): class ImageObject(models.Model):
image = models.ImageField('Изображение', upload_to='content/imageobject') 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) created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True) update_at = models.DateTimeField(auto_now=True)

@ -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),
),
]

@ -22,6 +22,7 @@ User = get_user_model()
class Like(models.Model): class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE)
ip = models.GenericIPAddressField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True) created_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True) update_at = models.DateTimeField(auto_now=True)

@ -56,6 +56,7 @@ INSTALLED_APPS = [
'sorl.thumbnail', 'sorl.thumbnail',
'raven.contrib.django.raven_compat', 'raven.contrib.django.raven_compat',
'django_user_agents', 'django_user_agents',
'imagekit',
] + [ ] + [
'apps.auth.apps', 'apps.auth.apps',
'apps.user', 'apps.user',

@ -28,4 +28,6 @@ git+https://github.com/ivlevdenis/python-instagram.git
django-user-agents==0.3.2 django-user-agents==0.3.2
user-agents==1.1.0 user-agents==1.1.0
ua-parser==0.8.0 ua-parser==0.8.0
django-ipware
django-imagekit

@ -1,7 +1,7 @@
<template> <template>
<div class="contest-work-item"> <div class="contest-work-item">
<a :href="`/contest-work/${contestWork.id}/`"> <a :href="`/contest-work/${contestWork.id}/`">
<img class="contest-work-item__img" :src="contestWork.image.image" /> <img class="contest-work-item__img" :src="contestWork.image.image_thumbnail" />
</a> </a>
<div class="contest-work-item__info"> <div class="contest-work-item__info">
<div class="contest-work-item__bio"> <div class="contest-work-item__bio">

@ -817,7 +817,7 @@ a[name]
&:not(:last-child) &:not(:last-child)
margin-bottom: 35px margin-bottom: 35px
+t +t
margin: 0 margin: 0 0 15px 0
&__curve &__curve
position: absolute position: absolute
pointer-events: none pointer-events: none

Loading…
Cancel
Save