当前位置:   article > 正文

【Django】自定义存储后端返回完整图片的URL链接_管理后台返回图片链接设计

管理后台返回图片链接设计

我们在Django存储图片的时候,并不是直接存储图片,而是存储图片的唯一标识,再通过标识去获取图片,例如下面的模型类有一个image字段,字段类型是ImageField

class SKUImage(BaseModel):
    sku = models.ForeignKey(SKU, on_delete=models.CASCADE, verbose_name='sku')
    image = models.ImageField(verbose_name='图片')  # 存储图片

    class Meta:
        db_table = 'tb_sku_image'

    def __str__(self):
        return '%s %s' % (self.sku.name, self.id)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

ImageField类型有一个url属性,返回的是该图片的URL链接(就是唯一标识),目前是这样的
在这里插入图片描述
im.image.url得到的只是原本的图片标识,我们想要的是一个带域名的完整URL链接,所以我们需要自定义存储后端,并改写url()函数返回完整图片链接

1.自定义存储后端

新建一个py文件,例如fastdfs.py
新建一个类,继承Storage,并且重写url()方法,把该方法的name参数拼接上自定义的字符串再返回

from django.core.files.storage import Storage

class FastDFSStorage(Storage):
    def _open(self,name,mode='rb'):
        # 打开django本地文件
        pass
    def _save(self,name,content,max_length=None):
        # 上传图片
        pass
    # 给返回的图片标识加上前缀
    def url(self, name):
        return "http://image.mysite.site:8888/" + name
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
2.修改配置文件

修改配置文件,告诉Django要使用我们自定义的存储后端

# 指定自定义的Django文件存储类
DEFAULT_FILE_STORAGE = 'xxxxxx.utils.fastdfs.FastDFSStorage' 
  • 1
  • 2

其他类似操作

【Django】自定义认证后端ModelBackend完成多手机号邮箱登录

【Django】创建用户,继承AbstractUser自定义用户模型类

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/44638
推荐阅读
相关标签
  

闽ICP备14008679号