前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年01月 Django商城项目 23-自定义文件存储系统

【愚公系列】2022年01月 Django商城项目 23-自定义文件存储系统

作者头像
愚公搬代码
发布2022-02-01 09:33:11
3330
发布2022-02-01 09:33:11
举报
文章被收录于专栏:历史专栏历史专栏

文章目录

前言

如果你需要提供自定义文件储存功能把文件储存在远程系统中,Django可以自定义一个存储类可以完成这一任务。

一、自定义的存储系统类

代码语言:javascript
复制
# 自定义存储类,重写url方法

"""
1. 您的自定义存储系统必须是以下的子类 django.core.files.storage.Storage
2.Django必须能够在没有任何参数的情况下实例化您的存储系统。
    这意味着任何设置都应该来自django.conf.settings
3.您的存储类必须实现_open()和_save() 方法以及适用于您的存储类的任何其他方法
4.您的存储类必须是可解构的, 以便在迁移中的字段上使用时可以对其进行序列化。
只要您的字段具有可自行序列化的参数,就 可以使用
django.utils.deconstruct.deconstructible类装饰器
(这就是Django在FileSystemStorage上使用的)

"""

from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible


@deconstructible
class MyStorage(Storage):
    # def __init__(self, option=None):
    #     if not option:
    #         option = settings.CUSTOM_STORAGE_OPTIONS

    def _open(self, name, mode='rb'):
        pass

    def _save(self, name, content, max_length=None):
        pass

    def url(self, name):
        # name 其实就是 file_id
        return 'http://192.168.229.148:8888/' + name

二、配置文件中

代码语言:javascript
复制
# 自定义完成了存储类之后,告诉系统,使用我们的自定义存储类
DEFAULT_FILE_STORAGE = 'utils.fdfs.faststorage.MyStorage'

三、页面中使用

只需要在字段中假url如下

1.原本

代码语言:javascript
复制
<img src="{{ content.image }}">

2.自定义后

代码语言:javascript
复制
<img src="{{ content.image.url}}">

补充

在你的存储类中,除了其他自定义的方法外,还必须实现 _open() 以及 _save() 方法。另外,如果你的类提供了本地文件存储,它必须重写 path() 方法。

  • _open(name, mode=‘rb’)

被Storage.open()调用,在打开文件时被使用。

  • _save(name, content)

被Storage.save()调用,name是传入的文件名,content是Django接收到的文件内容,该方法需要将content文件内容保存。

Django会将该方法的返回值保存到数据库中对应的文件字段,也就是说该方法应该返回要保存在数据库中的文件名称信息。

  • exists(name)

如果名为name的文件在文件系统中存在,则返回True,否则返回False。

  • url(name)

返回文件的完整访问URL

  • delete(name)

删除name的文件

  • listdir(path)

列出指定路径的内容

  • size(name)

返回name文件的总大小

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、自定义的存储系统类
  • 二、配置文件中
  • 三、页面中使用
    • 1.原本
      • 2.自定义后
      • 补充
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com