# 給上傳的圖檔重命名
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse
class ImageStorage(FileSystemStorage):
from django.conf import settings
def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL):
# 初始化
super(ImageStorage, self).__init__(location, base_url)
# 重寫 _save方法
def _save(self, name, content):
# name為上傳檔案名稱
import os, time, random
# 檔案擴充名
ext = os.path.splitext(name)[1]
# 檔案目錄
d = os.path.dirname(name)
# 定義檔案名,年月日時分秒随機數
fn = time.strftime('%Y%m%d%H%M%S')
fn = fn + '_%d' % random.randint(0, 100)
# 重寫合成檔案名
name = os.path.join(d, fn + ext)
# 調用父類方法
return super(ImageStorage, self)._save(name, content)
import django.utils.timezone as timezone
from django.db import models
from django.contrib import admin
from .storage import ImageStorage
# Create your models here.
class Urls(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(verbose_name="标題",max_length=255)
created_at = models.DateTimeField(verbose_name="建立時間",default = timezone.now)
url = models.ImageField(upload_to='images/%Y%m',storage=ImageStorage(),blank=True, verbose_name='圖檔', null=True)
readonly_fields = ['image_data']
def __str__(self):
return self.title
class Meta:
verbose_name = '圖檔管理'
verbose_name_plural = '圖檔管理'