一、Django文件存储类url()方法介绍
- 结论:
- 文件存储类url()方法的作用:返回name所代表的文件内容的URL。
- 文件存储类url()方法的触发:content.image.url
- 虽然表面上调用的是ImageField的url方法。但是内部会去调用文件存储类的url()方法。
- 文件存储类url()方法的使用:
- 我们可以通过自定义Django文件存储类达到重写url()方法的目的。
- 自定义Django文件存储类必须提供url()方法。
- 返回name所指的文件对应的绝对URL。
二、自定义Django文件存储类
1、重写Django文件存储类url()方法
class FastDFSStorage(Storage):
"""自定义文件存储系统,修改存储的方案"""
def __init__(self, fdfs_base_url=None):
"""
构造方法,可以不带参数,也可以携带参数
:param base_url: Storage的IP
"""
# if not fdfs_base_url:
# self.fdfs_base_url = settings.FDFS_BASE_URL
# else:
# self.fdfs_base_url = fdfs_base_url
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.15.134.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.15.134:8888/'
FDFS_BASE_URL = 'http://image.meiduo.site:8888/'
3、添加访问图片的域名
• 在/etc/hosts中添加访问Storage的域名
#Storage的IP 域名
192.168.15.134 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>
5、开启虚拟机:打开storage tracker 页面可以展示出全部图片
- 开启fastdfs服务
- 访问主页