【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)

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

2.修改配置文件

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

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

其他类似操作

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

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

猜你喜欢

转载自blog.csdn.net/qq_39147299/article/details/108538974
今日推荐