|
@@ -6,23 +6,15 @@ from django.db import models
|
|
from django.conf import settings
|
|
from django.conf import settings
|
|
from django.utils import timezone
|
|
from django.utils import timezone
|
|
|
|
|
|
-from utils.file_operation import UploadFile, DeleteFile, DownloadFace
|
|
|
|
|
|
+from utils.file_operation import UploadFile, DeleteFile
|
|
|
|
|
|
|
|
|
|
class ImagesManager(models.Manager):
|
|
class ImagesManager(models.Manager):
|
|
-
|
|
|
|
- def employee_addnew(self, employee, type, file):
|
|
|
|
- return self._addnew(employee.user, type, file)
|
|
|
|
-
|
|
|
|
- def customer_addnew(self, customer, type, file):
|
|
|
|
- return self._addnew(customer.user, type, file)
|
|
|
|
-
|
|
|
|
- def _addnew(self, user, type, file):
|
|
|
|
|
|
+ def _addnew(self, user, type, file, size=None):
|
|
width = None
|
|
width = None
|
|
height = None
|
|
height = None
|
|
|
|
|
|
- path = ImagesManager.calculatePath(type, user.id)
|
|
|
|
- modify_size = ImagesManager.canModifySize(type)
|
|
|
|
|
|
+ path = ImagesManager.calculatePath(type)
|
|
filename = UploadFile(file, path)
|
|
filename = UploadFile(file, path)
|
|
fullname = "%s/%s" % (settings.MEDIA_ROOT, filename)
|
|
fullname = "%s/%s" % (settings.MEDIA_ROOT, filename)
|
|
|
|
|
|
@@ -30,7 +22,7 @@ class ImagesManager(models.Manager):
|
|
img = Image.open(fullname)
|
|
img = Image.open(fullname)
|
|
width, height = img.size
|
|
width, height = img.size
|
|
# 缩略图压缩宽或高最大200
|
|
# 缩略图压缩宽或高最大200
|
|
- if modify_size and (width > 200 or height > 200):
|
|
|
|
|
|
+ if width > 200 or height > 200:
|
|
if width > height:
|
|
if width > height:
|
|
size = (200, int(height * 200 / width))
|
|
size = (200, int(height * 200 / width))
|
|
elif width < height:
|
|
elif width < height:
|
|
@@ -45,8 +37,7 @@ class ImagesManager(models.Manager):
|
|
instance = self.model(
|
|
instance = self.model(
|
|
user=user,
|
|
user=user,
|
|
type=type,
|
|
type=type,
|
|
- name=file.name,
|
|
|
|
- picture=filename,
|
|
|
|
|
|
+ picture="%s%s" % (settings.MEDIA_URL, filename),
|
|
width=width,
|
|
width=width,
|
|
height=height,
|
|
height=height,
|
|
create_time=timezone.now()
|
|
create_time=timezone.now()
|
|
@@ -55,97 +46,35 @@ class ImagesManager(models.Manager):
|
|
return instance
|
|
return instance
|
|
|
|
|
|
@staticmethod
|
|
@staticmethod
|
|
- def calculatePath(type, user_id):
|
|
|
|
|
|
+ def calculatePath(type):
|
|
path_map = {
|
|
path_map = {
|
|
- Images.PACKAGE_FILE: package_detail_file,
|
|
|
|
- Images.PACKAGE_THUMBNAIL_FILE: package_thumbnail_file,
|
|
|
|
- Images.PACKAGE_PLAYBILL_FILE: package_playbill_file,
|
|
|
|
- Images.POSTER_FILE: poster_file,
|
|
|
|
- Images.SALES_ADVISOR_FACE: sales_advisor_face_file,
|
|
|
|
- Images.SALES_ADVISOR_CODE: sales_advisor_code_file,
|
|
|
|
- Images.SHOP_FILE: shop_file,
|
|
|
|
- Images.VEHICLE_SERIES_THUMBNAIL: vehicle_series_thumbnail_file,
|
|
|
|
- Images.VEHICLE_MODEL_THUMBNAIL: vehicle_model_thumbnail_file,
|
|
|
|
- Images.VEHICLE_MODEL_PLAYBILL: vehicle_model_playbill_file,
|
|
|
|
- Images.VEHICLE_IMAGES: vehicle_model_detail_file,
|
|
|
|
- Images.VEHICLE_MODEL_IMAGES: vehicle_detail_file,
|
|
|
|
- Images.CUSTOMER_FACE: customer_face_file,
|
|
|
|
- Images.ACTIVITY_PLAYBILL_FILE: activity_playbill_file,
|
|
|
|
|
|
+ Images.COMMODITY_SHOW_IMAGE: commodity_show_image,
|
|
|
|
+ Images.COMMODITY_DETAILS_IMAGE: commodity_details_image,
|
|
|
|
+ Images.COMMODITY_CAROUSEL_IMAGE: commodity_carousel_image,
|
|
}
|
|
}
|
|
|
|
+ return path_map[type]
|
|
|
|
|
|
- return path_map[type] + str(user_id) + '/'
|
|
|
|
|
|
|
|
- @staticmethod
|
|
|
|
- def canModifySize(type):
|
|
|
|
- modify_size = False
|
|
|
|
- can_modify_list = [
|
|
|
|
- Images.PACKAGE_THUMBNAIL_FILE,
|
|
|
|
- Images.SALES_ADVISOR_FACE,
|
|
|
|
- Images.SALES_ADVISOR_CODE,
|
|
|
|
- Images.SHOP_FILE,
|
|
|
|
- Images.VEHICLE_SERIES_THUMBNAIL,
|
|
|
|
- Images.VEHICLE_MODEL_THUMBNAIL,
|
|
|
|
- ]
|
|
|
|
- if type in can_modify_list:
|
|
|
|
- modify_size = True
|
|
|
|
-
|
|
|
|
- return modify_size
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-package_detail_file = "package/detail/"
|
|
|
|
-package_thumbnail_file = "package/thumbnail/"
|
|
|
|
-package_playbill_file = "package/playbill/"
|
|
|
|
-poster_file = 'poster/'
|
|
|
|
-sales_advisor_face_file = "sales_advisor/face/"
|
|
|
|
-sales_advisor_code_file = "sales_advisor/code/"
|
|
|
|
-shop_file = "shop/"
|
|
|
|
-vehicle_series_thumbnail_file = 'vehicle_series/'
|
|
|
|
-vehicle_model_thumbnail_file = 'vehicle_model/thumbnail/'
|
|
|
|
-vehicle_model_playbill_file = 'vehicle_model/playbill/'
|
|
|
|
-vehicle_model_detail_file = 'vehicle_model/detail/'
|
|
|
|
-vehicle_detail_file = 'vehicle/detail/'
|
|
|
|
-customer_face_file = 'customer/face/'
|
|
|
|
-activity_playbill_file = 'activity/playbill/'
|
|
|
|
|
|
+commodity_show_image = "commodity/show/"
|
|
|
|
+commodity_details_image = "commodity/details/"
|
|
|
|
+commodity_carousel_image = "commodity/carousel/"
|
|
|
|
|
|
|
|
|
|
class Images(models.Model):
|
|
class Images(models.Model):
|
|
- PACKAGE_FILE = 1
|
|
|
|
- PACKAGE_THUMBNAIL_FILE = 2
|
|
|
|
- PACKAGE_PLAYBILL_FILE = 3
|
|
|
|
- POSTER_FILE = 4
|
|
|
|
- SALES_ADVISOR_FACE = 5
|
|
|
|
- SALES_ADVISOR_CODE = 6
|
|
|
|
- SHOP_FILE = 7
|
|
|
|
- VEHICLE_SERIES_THUMBNAIL = 8
|
|
|
|
- VEHICLE_MODEL_THUMBNAIL = 9
|
|
|
|
- VEHICLE_MODEL_PLAYBILL = 10
|
|
|
|
- VEHICLE_IMAGES = 11
|
|
|
|
- VEHICLE_MODEL_IMAGES = 12
|
|
|
|
- CUSTOMER_FACE = 13
|
|
|
|
- ACTIVITY_PLAYBILL_FILE= 14
|
|
|
|
|
|
+ COMMODITY_SHOW_IMAGE = 1
|
|
|
|
+ COMMODITY_DETAILS_IMAGE = 2
|
|
|
|
+ COMMODITY_CAROUSEL_IMAGE = 3
|
|
TYPE_CHOICES = (
|
|
TYPE_CHOICES = (
|
|
- (PACKAGE_FILE, u'商品图片'),
|
|
|
|
- (PACKAGE_THUMBNAIL_FILE, u'商品缩略图'),
|
|
|
|
- (PACKAGE_PLAYBILL_FILE, u'商品海报'),
|
|
|
|
- (POSTER_FILE, u'广告图片'),
|
|
|
|
- (SALES_ADVISOR_FACE, u'销售顾问头像'),
|
|
|
|
- (SALES_ADVISOR_CODE, u'销售顾问二维码'),
|
|
|
|
- (SHOP_FILE, u'门店图片'),
|
|
|
|
- (VEHICLE_SERIES_THUMBNAIL, u'车系缩略图'),
|
|
|
|
- (VEHICLE_MODEL_THUMBNAIL, u'车型缩略图'),
|
|
|
|
- (VEHICLE_MODEL_PLAYBILL, u'车型海报'),
|
|
|
|
- (VEHICLE_IMAGES, u'整车图片'),
|
|
|
|
- (VEHICLE_MODEL_IMAGES, u'车型图片'),
|
|
|
|
- (CUSTOMER_FACE, u'客户头像'),
|
|
|
|
- (ACTIVITY_PLAYBILL_FILE, u'活动封面'),
|
|
|
|
|
|
+ (COMMODITY_SHOW_IMAGE, u'商品缩略图'),
|
|
|
|
+ (COMMODITY_DETAILS_IMAGE, u'商品详情图'),
|
|
|
|
+ (COMMODITY_CAROUSEL_IMAGE, u'商品轮播图'),
|
|
)
|
|
)
|
|
|
|
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)
|
|
type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
|
|
type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
|
|
- name = models.CharField(verbose_name=u'图片名', max_length=250)
|
|
|
|
picture = models.CharField(verbose_name=u'图片路径', max_length=250)
|
|
picture = models.CharField(verbose_name=u'图片路径', max_length=250)
|
|
- width = models.IntegerField(verbose_name=u"图片宽度")
|
|
|
|
- height = models.IntegerField(verbose_name=u"图片高度")
|
|
|
|
|
|
+ width = models.IntegerField(verbose_name=u"图片宽度", blank=True, default=0)
|
|
|
|
+ height = models.IntegerField(verbose_name=u"图片高度", blank=True, default=0)
|
|
create_time = models.DateTimeField(verbose_name=u'上传时间', default=timezone.now, editable=False)
|
|
create_time = models.DateTimeField(verbose_name=u'上传时间', default=timezone.now, editable=False)
|
|
|
|
|
|
objects = ImagesManager()
|
|
objects = ImagesManager()
|
|
@@ -166,24 +95,4 @@ class Images(models.Model):
|
|
DeleteFile(picture)
|
|
DeleteFile(picture)
|
|
|
|
|
|
def get_path(self):
|
|
def get_path(self):
|
|
- return '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, self.picture)
|
|
|
|
-
|
|
|
|
- @staticmethod
|
|
|
|
- def downLoadFace(customer, url):
|
|
|
|
- save_path = customer_face_file + str(customer.user.id) + '/'
|
|
|
|
- filename = DownloadFace(url, save_path, 'jpg')
|
|
|
|
- name = filename.split('/')[-1]
|
|
|
|
- fullname = "%s/%s" % (settings.MEDIA_ROOT, filename)
|
|
|
|
- width = None
|
|
|
|
- height = None
|
|
|
|
- try:
|
|
|
|
- img = Image.open(fullname)
|
|
|
|
- width, height = img.size
|
|
|
|
- except:
|
|
|
|
- pass
|
|
|
|
- instance = Images.objects.create(
|
|
|
|
- tenant=customer.tenant, user=customer.user, type=Images.CUSTOMER_FACE, name=name, picture=filename,
|
|
|
|
- width=width, height=height, create_time=timezone.now()
|
|
|
|
- )
|
|
|
|
- instance.save()
|
|
|
|
- return instance
|
|
|
|
|
|
+ return '%s%s' % (settings.SERVER_DOMAIN, self.picture)
|