django ImageField,FileField,上传文件,命名问题

本文介绍如何在Django中自定义文件上传路径与文件名,通过创建自定义的存储类实现更灵活的文件管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django 的models.ImageFiled,FileField有属性upload_to,该属性是指定将文件上传到服务器的位置,及存储在哪个文件夹下,你可以很方便甚至很少的代码就可以实现文件上传操作了。但是默认的存储的文件名是没有改变的,也就是说所存储的文件名就是你上传时文件的本地名,当服务器文件夹下有相同的文件名时,系统会自动添加下划线来改变文件名,以保证文件能顺利上传到服务器上。当是这样的文件名十分不美观,而且很多时候我们喜欢自己定义文件名,甚至动态控制文件保存的位置。这样看上去可能就不那么容易了。其他django其他的功能也为我们想好了这一点,并且很容易就可以实现你想要的操作。

1. upload_to指定的是文件保存的目录,你可以指定upload_to="/upload/%Y%m",这段的意思是根据当前的年月作为目录名,将文件保存到该文件夹下面,例如,现在是2009年2月,那么文件就会保存在/upload/200902/目录下面。目录可以根据日期来改变了,当然如果我不想用日期呢,而且文件名我如何自定义呢?下面看第二点

2. 查看django文档我们可以看到http://docs.djangoproject.com/en/dev/topics/files/#topics-files,文档中我们发现,下面的代码:

其中有from django.core.files.storage import default_storage
我们查看django的原文件django.core.files.storage

下面定义了Storage和FileSystemStorage,其中FileSystemStorage继承之Storage,文件最后有两句

与前面from django.core.files.storage import default_storage比较可以发现,

default_storage是我们在settings.py中定义的,也许你在自己项目下面settings.py文件里面没有看到这个属性,但是我们知道项目下面的settings.py都是继承之global_settings.py的,再次查看django原文件,在django/conf可以看到该文件,打开按 Ctrl + F查找DEFAULT_FILE_STORAGE 就可以看到DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage',也就是默认的Storage了,找到这个我们就找到文件彻底解决的办法了,写一个自己的Storage,来处理自己需要的操作。

因为Storage是基类,而且是“虚类”,我们可以继承FileSystemStorage,因为该类已经帮我们做好了大部分事情。下面是个简单的例子---实现上面所说的自定义文件名:

 

OK!其他操作也就是重写相应的方法来满足你的需要喽。

看来,在遇到问题的时候还是要多看看文档,然后看看原程序,看他们是如何实现的,说不定就会有意想不到的想法和发现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值