阿语python4-2 美多商城v5.0商品-首页广告之第6.3.2节自定义Django文件存储类

news/2024/7/19 14:41:29 标签: java, django, python, web, js
js_content">

自定义Django文件存储类

思考:

  • 下图首页页面中图片无法显示的原因。

结论:

  • 通过FastDFS上传文件后返回的'Remote file_id'字段是文件索引。

  • 文件索引会被我们存储到MySQL数据库。所以将来读取出来的也是文件索引,导致界面无法下载到图片。

解决:

  • 重写Django文件存储类的url()方法。

  • 在重写时拼接完整的图片下载地址(协议、IP、端口、文件索引)

1. Django文件存储类url()方法介绍

结论:

  • 文件存储类url()方法的作用:返回name所代表的文件内容的URL。

  • 文件存储类url()方法的触发:content.image.url

    • 虽然表面上调用的是ImageFieldurl方法。但是内部会去调用文件存储类的url()方法。

  • 文件存储类url()方法的使用:

    • 我们可以通过自定义Django文件存储类达到重写url()方法的目的。

    • 自定义Django文件存储类必须提供url()方法。

    • 返回name所指的文件对应的绝对URL。

2. 自定义Django文件存储类

自定义文件存储类的官方文档

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

3. 重写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 = 'meiduo_mall.utils.fastdfs.fdfs_storage.FastDFSStorage'

# FastDFS相关参数
# FDFS_BASE_URL = 'http://192.168.103.158:8888/'
FDFS_BASE_URL = 'http://image.meiduo.site:8888/'

3.添加访问图片的域名

  • /etc/hosts中添加访问Storage的域名

$ Storage的IP        域名
$ 192.168.103.158    image.meiduo.site

4.文件存储类url()方法的使用

  • 以图片轮播图为例:content.image.url

<ul class="slide">
    {% for content in contents.index_lbt %}
    <li><a href="{{ content.url }}"><img src="{{ content.image.url }}" alt="{{ content.title }}"></a></li>
    {% endfor %}
</ul>


http://www.niftyadmin.cn/n/739742.html

相关文章

阿语python4-2 美多商城v5.0商品-准备商品数据之第6.2.4节录入商品数据和图片数据...

1. SQL脚本录入商品数据$ mysql -h127.0.0.1 -uroot -pmysql meiduo_mall < 文件路径/goods_data.sql2. FastDFS服务器录入图片数据1.准备新的图片数据压缩包2.删除 Storage 中旧的data目录3.拷贝新的图片数据压缩包到 Storage&#xff0c;并解压# 解压命令 sudo tar -zxvf …

阿语python4-2 美多商城v5.0商品-准备商品数据之第6.2.2节容器化方案Docker

容器化方案Docker思考&#xff1a;FastDFS的安装步骤非常的多&#xff0c;涉及的依赖包也很多&#xff0c;当新的机器需要安装FastDFS时&#xff0c;是否需要从头开始安装。我们在学习时拿到ubuntu系统的镜像&#xff0c;在VM虚拟机中运行这个镜像后&#xff0c;为什么就可以直…

阿语python4-2 美多商城v5.0商品-商品列表页之第6.4.1节商品列表页分析

商品列表页分析1. 商品列表页组成结构分析1.商品频道分类已经提前封装在contents.utils.py文件中&#xff0c;直接调用即可。2.面包屑导航可以使用三级分类ID&#xff0c;查询出该类型商品的三级分类数据。3.排序和分页无论如何排序和分页&#xff0c;商品的分类不能变。排序时…

阿语python美多商城-商品-商品详情页之第6.6.2节展示详情页数据

1. 查询和渲染SKU详情信息# 渲染页面 context {categories:categories,breadcrumb:breadcrumb,sku:sku, } return render(request, detail.html, context)<div class"goods_detail_con clearfix"><div class"goods_detail_pic fl"><img sr…

阿语python美多商城-商品-商品详情页之第6.6.3节统计分类商品访问量

统计分类商品访问量提示&#xff1a;统计分类商品访问量 是统计一天内该类别的商品被访问的次数。需要统计的数据&#xff0c;包括商品分类&#xff0c;访问次数&#xff0c;访问时间。一天内&#xff0c;一种类别&#xff0c;统计一条记录。1. 统计分类商品访问量模型类模型类…

阿语python4-2 美多商城v5.0商品-商品搜索之第6.5.1节全文检索方案Elasticsearch

全文检索方案Elasticsearch1. 全文检索和搜索引擎原理商品搜索需求当用户在搜索框输入商品关键字后&#xff0c;我们要为用户提供相关的商品搜索结果。商品搜索实现可以选择使用模糊查询like关键字实现。但是 like 关键字的效率极低。查询需要在多个字段中进行&#xff0c;使用…

阿语python4-2 美多商城v5.0商品-商品列表页之第6.4.4节列表页分页和排序

列表页热销排行根据路径参数category_id查询出该类型商品销量前二的商品。使用Ajax实现局部刷新的效果。1. 查询列表页热销排行数据1.请求方式选项方案请求方法GET请求地址/hot/(?P<category_id>\d)/2.请求参数&#xff1a;路径参数参数名类型是否必传说明category_idst…

阿语python美多商城-商品-商品搜索之第6.5.3节渲染商品搜索结果

1. 准备商品搜索结果页面2. 渲染商品搜索结果Haystack返回的数据包括&#xff1a;query&#xff1a;搜索关键字paginator&#xff1a;分页paginator对象page&#xff1a;当前页的page对象&#xff08;遍历page中的对象&#xff0c;可以得到result对象&#xff09;result.object…