Django以相同名称保存,删除和查看用户上传的媒体

时间:2019-06-11 17:41:43

标签: django image model

我有一个个人资料应用,用户可以在其中上传个人资料图片。我用用户名保存图片。 ifakih.jpg。如果该文件已经存在,并且他们想更改其个人资料图片,我将删除旧的图片,然后用新的图片替换。我可以在目录中看到更改。旧的ifakih.jpg替换为新的。但是,我的网站仍然使用旧图像。如果我转到管理员并检查该用户的图像字段,则它指向正确的目录和图像,但是内容错误。

Models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=64,blank=True)
    profilePic = models.ImageField(blank=True, null=True, upload_to= path_and_rename)
    phoneNumber = models.CharField(max_length=12,blank=True)
    streetAddress = models.CharField(max_length=64,blank=True)

@receiver(pre_delete, sender=Profile)
def post_delete(sender, instance, **kwargs):
"""
Deleting the specific image of a Post after delete it
"""
   if instance.profilePic:
       if os.path.isfile(instance.profilePic.path):
          os.remove(instance.profilePic.path)

 @receiver(pre_save, sender=Profile)
 def post_update(sender, instance, **kwargs):
  """
  Replacing the specific image of a Post after update
  """
  if not instance.pk:
     return False

  if sender.objects.get(pk=instance.pk).profilePic:
      old_image = sender.objects.get(pk=instance.pk).profilePic
      new_image = instance.profilePic
      if not old_image == new_image:
          if os.path.isfile(old_image.path):
              os.remove(old_image.path)
  else:
     return False  

1 个答案:

答案 0 :(得分:0)

这听起来像是浏览器缓存图像引起的问题。

要查看是否与此相关,请尝试使用STRG + F5重新加载以忽略缓存的文件(您可以在“网络”标签中禁用浏览器缓存)。

您可以通过两种方式解决该问题:

1)禁用对个人资料图片的缓存,以便浏览器始终加载图像而根本不缓存。这会导致服务器上的流量增加,并且站点的加载时间也会更长。 (不推荐)

2)您更改文件保存行为并允许使用不同的文件名。这样,浏览器将为第一个请求加载图像,然后可以使用其缓存。保存时,ImageField还将为您生成一个唯一的名称。 (首选)