⽤django开发,经常要处理⽤户上传的⽂件, ⽐如user模型⾥⾯如果⼜个⼈头像的字段 ImageField等等,⽽django在FielField字段(包括ImageField)的⽀持和扩展是做的很好的,⾸先⼀个问题,是上传的⽂件,django是放到哪⾥去了,(note: ⽂件流是不会放到数据库⾥⾯的,该字段在数据库中只存储路径),django提供了upload_to属性以下介绍upload_to的具体使⽤⽅法1.最直接的⽅式,硬编码路径
# MyProject.settings.py ⾥⾯设置MEDIA_ROOT and MEDIA_URLMEDIA_ROOT = os.path.join(BASE_DIR, 'upload/')
MEDIA_URL = '/upload/' #这个是在浏览器上访问该上传⽂件的url的前缀# models.py
class User(models.Model):
avatar = ImageField(upload_to = 'avatar/')
#实际的路径就是 MEDIA_ROOT/avatar/filename #所以可以⽤uoload_to来指定⽂件存放的前缀路径
2.使⽤strftime()
如果觉得以上⽅式太僵硬,万⼀⽂件重名了,那就会有各种问题了,为了避免重名,django在upload_to上内置了strftime()函数
# models.py
class User(models.Model):
avatar = ImageField(upload_to = 'avatar/%Y/%m/%d/')
这样⼦的⽅式,%Y、%m、%d分别表⽰年、⽉、⽇3.更加灵活的⽅式
当然,如果觉得只是避免⽂件路径重名,还是不能满⾜你,其实,django还允许你重写⼀个upload_to函数,重定义上传⽂件的路径前缀
# models.py
#让上传的⽂件路径动态地与user的名字有关def upload_to(instance, fielname):
return '/'.join([MEDIA_ROOT, instance.user_name, filename])class User(models.Model):
avatar = ImageField(upload_to = upload_to) user_name = CharField(max_length = 250)
以上这篇django之对FileField字段的upload_to的设定⽅法就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
因篇幅问题不能全部显示,请点此查看更多更全内容