From c87a7a16890f28a8176b0ab69a417bec98463c2b Mon Sep 17 00:00:00 2001 From: gzbender Date: Wed, 28 Aug 2019 05:25:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BD=D0=B0=20DEV=20=D0=BD=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=83=20=D0=BA=D1=83=D1=80=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/content/models.py | 13 ++++++++--- apps/course/templates/course/_items.html | 4 ++-- apps/course/templates/course/course.html | 12 ++++------ .../school/livelesson_detail_unauth.html | 4 ++-- apps/user/models.py | 6 ++++- docker/.env.review | 1 + project/settings.py | 22 ++++++++++-------- project/utils/db.py | 23 +++++++++++++++++++ 8 files changed, 60 insertions(+), 25 deletions(-) diff --git a/apps/content/models.py b/apps/content/models.py index e57746f3..4566864c 100644 --- a/apps/content/models.py +++ b/apps/content/models.py @@ -9,15 +9,19 @@ from django.utils import timezone from django.contrib.postgres.fields import ArrayField from imagekit.models import ImageSpecField from imagekit.processors import ResizeToCover - from polymorphic.models import PolymorphicModel +from project.utils.db import SafeImageField + User = get_user_model() class ImageObject(models.Model): - image = models.ImageField('Изображение', upload_to='content/imageobject') + if settings.DEV_SERVER: + image = SafeImageField('Изображение', upload_to='content/imageobject') + else: + image = models.ImageField('Изображение', upload_to='content/imageobject') image_thumbnail = ImageSpecField(source='image', processors=[ResizeToCover(300, 200, False)], format='JPEG', @@ -158,7 +162,6 @@ class Banner(models.Model): text = models.TextField(blank=True, default='') button_text = models.CharField(max_length=50, blank=True, default='') url = models.URLField(blank=True, default='') - image = models.ImageField() use = models.BooleanField(default=False) color = models.CharField(max_length=7, blank=True, default='') color2 = models.CharField(max_length=7, blank=True, default='') @@ -168,6 +171,10 @@ class Banner(models.Model): update_at = models.DateTimeField(auto_now=True) pages = ArrayField(models.IntegerField(choices=PAGE_CHOICES), default=[], blank=True) main_banner = ArrayField(models.IntegerField(choices=PAGE_CHOICES), default=[], blank=True) + if settings.DEV_SERVER: + image = SafeImageField() + else: + image = models.ImageField() class Meta: verbose_name = 'Банер' diff --git a/apps/course/templates/course/_items.html b/apps/course/templates/course/_items.html index 1aceba54..f1cd65cf 100644 --- a/apps/course/templates/course/_items.html +++ b/apps/course/templates/course/_items.html @@ -9,9 +9,9 @@ > {% if course.cover and course.cover.image_thumbnail %} - + {% else %} - + {% endif %} {% if course.is_featured %}
diff --git a/apps/course/templates/course/course.html b/apps/course/templates/course/course.html index 04fbe434..db228e96 100644 --- a/apps/course/templates/course/course.html +++ b/apps/course/templates/course/course.html @@ -10,13 +10,13 @@ {% block ogurl %}{{ request.build_absolute_uri }}{% endblock ogurl %} {% block ogimage %} - http://{{request.META.HTTP_HOST}}{% if course.cover and course.cover.image %}{{ course.cover.image.url }}{% else %}{% static 'img/og_courses.jpg' %}{% endif %} + http://{{request.META.HTTP_HOST}}{% if course.cover %}{{ course.cover.image.url }}{% else %}{% static 'img/og_courses.jpg' %}{% endif %} {% endblock ogimage %} {% block ogimage-width %} - {% if course.cover and course.cover.image %}{{ course.cover.image.width }}{% else %}1024{% endif %} + {% if course.cover %}{{ course.cover.image.width|default:'1024' }}{% else %}1024{% endif %} {% endblock ogimage-width %} {% block ogimage-height %} - {% if course.cover and course.cover.image %}{{ course.cover.image.height }}{% else %}512{% endif %} + {% if course.cover %}{{ course.cover.image.height|default:'512' }}{% else %}512{% endif %} {% endblock ogimage-height %} @@ -212,10 +212,8 @@ {% endif %}
- {% if course.cover and course.cover.image %} + {% if course.cover %} - {% else %} - {% endif %} {% if course.is_deferred_start %}
@@ -272,7 +270,7 @@ {% endif %}
diff --git a/apps/school/templates/school/livelesson_detail_unauth.html b/apps/school/templates/school/livelesson_detail_unauth.html index 4493928f..8ca10e74 100644 --- a/apps/school/templates/school/livelesson_detail_unauth.html +++ b/apps/school/templates/school/livelesson_detail_unauth.html @@ -9,10 +9,10 @@ {% if livelesson.cover and livelesson.cover.image %}http://{{request.META.HTTP_HOST}}{{ livelesson.cover.image.url }}{% else %}{{ block.super }}{% endif %} {% endblock ogimage %} {% block ogimage-width %} - {% if livelesson.cover and livelesson.cover.image %}{{ livelesson.cover.image.width }}{% else %}{{ block.super }}{% endif %} + {% if livelesson.cover and livelesson.cover.image %}{{ livelesson.cover.image.width|default:'1024' }}{% else %}{{ block.super }}{% endif %} {% endblock ogimage-width %} {% block ogimage-height %} - {% if livelesson.cover and livelesson.cover.image %}{{ livelesson.cover.image.height }}{% else %}{{ block.super }}{% endif %} + {% if livelesson.cover and livelesson.cover.image %}{{ livelesson.cover.image.height|default:'512' }}{% else %}{{ block.super }}{% endif %} {% endblock ogimage-height %} {% block content %} diff --git a/apps/user/models.py b/apps/user/models.py index 7a774998..2b07118c 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -19,6 +19,7 @@ from django.urls import reverse from api.v1 import serializers from apps.notification.utils import send_email from apps.user.tasks import user_to_mixpanel +from project.utils.db import SafeImageField class UserManager(BaseUserManager): @@ -79,7 +80,10 @@ class User(AbstractUser): is_email_proved = models.BooleanField( 'Верифицирован по email', default=False ) - photo = models.ImageField('Фото', null=True, blank=True, upload_to='users') + if settings.DEV_SERVER: + photo = SafeImageField('Фото', null=True, blank=True, upload_to='users') + else: + photo = models.ImageField('Фото', null=True, blank=True, upload_to='users') show_in_mainpage = models.BooleanField('Показывать на главной странице', default=False) trial_lesson = models.URLField(default='', null=True, blank=True) slug = models.SlugField( diff --git a/docker/.env.review b/docker/.env.review index dc0ff7ab..54d6c94e 100644 --- a/docker/.env.review +++ b/docker/.env.review @@ -1,4 +1,5 @@ DEBUG=True +DEV_SERVER=True ALLOWED_HOSTS=* PORT=8000 CORS_ORIGIN_WHITELIST=lilcity.9ev.ru:8080 diff --git a/project/settings.py b/project/settings.py index 211a732b..9572ee2b 100644 --- a/project/settings.py +++ b/project/settings.py @@ -30,6 +30,7 @@ SECRET_KEY = os.getenv( # SECURITY WARNING: don't run with debug turned on in production! DEBUG = os.getenv('DEBUG', False) +DEV_SERVER = os.getenv('DEV_SERVER', False) ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '*').split(',') MAIN_HOST = os.getenv('MAIN_HOST', 'lil.school') @@ -253,8 +254,6 @@ MEDIA_ROOT = os.path.join(BASE_DIR, 'media') RESOURCES_ROOT = os.path.join(BASE_DIR, 'resources') -IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY = 'imagekit.cachefiles.strategies.Optimistic' - LOGIN_URL = '/' # Email # https://github.com/anymail/django-anymail @@ -374,14 +373,6 @@ else: # Mixpanel settings MIX_TOKEN = os.getenv('MIXPANEL_TOKEN', '79bd6bfd98667ed977737e6810b8abcd') -# CORS settings - -if DEBUG: - CORS_ORIGIN_ALLOW_ALL = True -else: - CORS_ORIGIN_WHITELIST = os.getenv( - 'CORS_ORIGIN_WHITELIST', 'lilcity.9ev.ru:8080').split(',') - # Swagger doc settings SWAGGER_SETTINGS = { @@ -412,3 +403,14 @@ try: from .local_settings import * except ImportError: pass + +# CORS settings + +if DEBUG: + CORS_ORIGIN_ALLOW_ALL = True +else: + CORS_ORIGIN_WHITELIST = os.getenv( + 'CORS_ORIGIN_WHITELIST', 'lilcity.9ev.ru:8080').split(',') + +if DEV_SERVER: + IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY = 'imagekit.cachefiles.strategies.Optimistic' diff --git a/project/utils/db.py b/project/utils/db.py index 4a31f79a..eb772fb8 100644 --- a/project/utils/db.py +++ b/project/utils/db.py @@ -1,5 +1,28 @@ from django.db.models.base import ModelBase from django.db import connection +from django.db import models +from django.db.models.fields.files import ImageFieldFile + + +class SafeImageFieldFile(ImageFieldFile): + + @property + def width(self): + try: + return self.width + except: + return None + + @property + def height(self): + try: + return self.height + except: + return None + + +class SafeImageField(models.ImageField): + attr_class = SafeImageFieldFile class ModelFieldsNames(object):