首页 > 其他分享 >django之对FileField字段的upload_to的设定

django之对FileField字段的upload_to的设定

时间:2023-05-25 14:33:46浏览次数:52  
标签:models MEDIA upload django avatar ImageField FileField

     用django开发,经常要处理用户上传的文件, 比如user模型里面如果又个人头像的字段 ImageField等等,而django在FielField字段(包括ImageField)的支持和扩展是做的很好的,首先一个问题,是上传的文件,django是放到哪里去了,(note: 文件流是不会放到数据库里面的,该字段在数据库中只存储路径),django提供了upload_to属性
     以下介绍upload_to的具体使用方法

1.最直接的方式,硬编码路径

#  MyProject.settings.py 里面设置MEDIA_ROOT and MEDIA_URL MEDIA_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)

 

标签:models,MEDIA,upload,django,avatar,ImageField,FileField
From: https://www.cnblogs.com/weifeng1463/p/17431106.html

相关文章

  • django使用mysql数据库
    1、启动/停止mysqlnetstartmysql80netstopmysql802、登录mysqlmysql-uroot-ppassword3、创建数据库/databasecreatdatabaseday10DEFAULTCHARSETutf8COLLATEutf8_general_ci;4、pycharm设置使用mysql,在settings中添加如下代码1DATABASES={2......
  • django配置文件作用,drf 登录功能,drf认证组件,drf权限组件,drf频率组件
    django配置文件作用:    drf登录功能:view内:from.modelsimportUserInfo,UserTokenfromrest_framework.viewsetsimportViewSetimportuuidfromrest_framework.responseimportResponsefromrest_framework.decoratorsimportactionclassUser......
  • upload靶场总结12-21白名单
    PHP版本为5.5.9nts版本第十二关白名单校验(GET型0x00截断)漏洞描述:使用白名单限制上传文件类型,但上传文件的存放路径可控利用方法:设置上传路径为upload/phpinfo.php%00,添加phpinfo.php%00内容为了控制路径,上传文件后缀为白名单即可例:test.jpg,保存后为/upload/phpinfo.......
  • upload靶场总结1-11客户端验证和文件后缀验证
    第一关JS校验利用文件上传js前端的后缀名检测来进行检测后端并没有对文件进行检验上传文件方法1.关闭前端的js2.burp抓包先上传允许上传的文件,然后抓包后修改上传文件的后缀3、将网站源码复制下来,放到本地,然后将js代码删除。先查看网页源代码然后复制粘贴到本地文本文......
  • Django 路由分发
    Django路由分发当一个url请求过来之后1、先到项目主目录下的urls内。2、由这个url做处理分发给其他app内的urls。一级路由:主目录urls内引入includefromdjango.conf.urlsimporturl,includeurlpatterns=[#指定分发的app目录名称url(r'^cmdb/',include("app0......
  • 直播app开发,基于van-uploader封装的文件上传图片压缩组件
    直播app开发,基于van-uploader封装的文件上传图片压缩组件1、调用<template>  <div>    <compress-uploaderv-model="fileList":compressSwitch="true":quality="0.5":maxCount="3"/>  </div></template> <......
  • 基于django前端页面动态菜单
    1、settings中定义基于中间件变量的字典UNICOM_MENU={'leader':[{'text':'用户管理','url':'/xx/xx/'},{'text':'订单管理','url':'/xx/xx/'},{'text......
  • 百度WebUploader中实现文件上传下载的三种解决方案(推荐)
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有......
  • upload-labs靶场第10关
    经过查看源码很多文件格式都被禁掉了提示所以我们要尝试是否是循环验证循环验证就是没有进行二次验证或者多次验证只验证了一次但是加两个点或者加多个空格这样就只会检测到一次就只会删除一个剩下的就可以上传进去上传文件进行抓包查看完成......
  • upload-labs靶场第9关
    因为是白盒测试可以看到前端代码所以我们知道没有禁用掉字符::$DATA如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名上传文件进行抓包修改后缀查看完成......