Django文件存储类url()

Django文件存储类url()方法介绍
在这里插入图片描述

结论:
• 文件存储类url()方法的作用:返回name所代表的文件内容的URL。
• 文件存储类url()方法的触发:content.image.url
• 虽然表面上调用的是ImageField的url方法。但是内部会去调用文件存储类的url()方法。
• 文件存储类url()方法的使用:
• 我们可以通过自定义Django文件存储类达到重写url()方法的目的。
• 自定义Django文件存储类必须提供url()方法。
• 返回name所指的文件对应的绝对URL。

自定义Django文件存储类
自定义文件存储类的官方文档 : https://docs.djangoproject.com/en/2.2/howto/custom-file-storage/

class FastDFSStorage(Storage):
    """自定义文件存储系统"""
    def _open(self, name, mode='rb'):
        """
        用于打开文件
        :param name: 要打开的文件的名字
        :param mode: 打开文件方式
        :return: None
        """
        # 打开文件时使用的,此时不需要,而文档告诉说明必须实现,所以pass
        pass
    def _save(self, name, content):
        """
        用于保存文件
        :param name: 要保存的文件名字
        :param content: 要保存的文件的内容
        :return: None
        """
        # 保存文件时使用的,此时不需要,而文档告诉说明必须实现,所以pass
        pass

重写Django文件存储类url()方法
1.重写url()方法

class FastDFSStorage(Storage):
    """自定义文件存储系统,修改存储的方案"""
    def __init__(self, fdfs_base_url=None):
        """
        构造方法,可以不带参数,也可以携带参数
        :param base_url: Storage的IP
        """
        self.fdfs_base_url = fdfs_base_url or settings.FDFS_BASE_URL
    def _open(self, name, mode='rb'):
        ......
    def _save(self, name, content):
        ......
    def url(self, name):
        """
        返回name所指文件的绝对URL
        :param name: 要读取文件的引用:group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg
        :return: http://192.168.103.158:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg
        """
        # return 'http://192.168.103.158:8888/' + name
        # return 'http://image.meiduo.site:8888/' + name
        return self.fdfs_base_url + name

2.相关配置参数

# 指定自定义的Django文件存储类
DEFAULT_FILE_STORAGE = 'lgshop.utils.fastdfs.fdfs_storage.FastDFSStorage'
# FastDFS相关参数
# FDFS_BASE_URL = 'http://192.168.103.158:8888/'
FDFS_BASE_URL = 'http://image.meiduo.site:8888/'

fdfs_storage.py

# @Time:2021/3/23 17:49
# @Author:Ellen
# @File:fdfs_storage.py

from django.conf import settings
from django.core.files.storage import Storage


class FastDFSStorage(Storage):
    """自定义文件存储类"""

    def __init__(self, fdfs_base_url=None):
        # if not fdfs_base_url:
        #     self.fdfs_base_url = settings.FDFS_BASE_URL
        #     self.fdfs_base_url = fdfs_base_url
            # 上面三行可以一行代码完成
            self.fdfs_base_url = fdfs_base_url or settings.FDFS_BASE_URL

    # name是文件的路径 model 打开  content 文件内容
    def _open(self, name, mode='rb'):
        pass

    def _save(self, name, content):
        pass

    def url(self, name):
        """
        返回文件的全路径
        :param name: 文件路径
        :return: ip+port+文件路径
        """
        return self.fdfs_base_url + name

重写后,index.html里可调用(url) image.url
开启虚拟机:打开storage tracker 页面可以展示出全部图片
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45905671/article/details/115132415