简介
在网站部署的过程中,文件的上传也是经常用到一个重要功能,这次通过优快云上的“大江狗”博主了解并学习了三种上传方式,这里就不直接转载博主的文章,而是主要标注自己学习过程中出现的疑惑。
博主文章地址:https://blog.youkuaiyun.com/weixin_42134789/article/details/83240860
文件储存位置的设置
在 settings.py 中设置MEDIA_ROOT和MEDIA_URL,这两个文件的作用分别是设置文件存储的路径和文件的访问方式。之后在自己创建的app里面的 urls.py 的 urlpatterns 的末尾加上 static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ,static() 的功能是帮助器功能返回在调试模式下提供文件的 URL 模式。
关于MEDIA_ROOT 和 MEDIA_URL 的介绍可以参考:https://blog.youkuaiyun.com/geerniya/article/details/78958243
static()的功能介绍可见:https://blog.youkuaiyun.com/HeatDeath/article/details/71075133
上传模型的创建
模型的创建不是必须的,如果是小型的文件管理就可以没必要创建模型,而如果要对文件系统化管理,以防文件名字重复会覆盖,亦或者不想重复标明地址等,就还是运用模型规定有关的规则为宜。
format
format 是格式化函数,主要作用可以看作是拼接作用。如果在{}中没有数字,则是按默认顺序排列,如果有则按特定的顺序排列。
uuid
因为为了防止用户上传的文件名字相同而需要对上传后的文件进行重命名的操作。uuid4()则是通过伪随机数的方式生成。
os.path.join
因为不同系统的分隔符‘/’和‘\’是不一样的,所以在地址拼接的过程还是推荐使用os.path.join的方式进行。
class File
继承 models.Model 类后利用里面的函数 model.FileField 实现对上传的文件的指定位置存储,而不需要每次都定义存储位置。
upload_method 这个属性可加可不加。
URLConf 的配置
re_path 与 path 的区别:两者的作用是相同的,只不过是 re_path 能够通过正则表达式实现更强大的功能,没什么特殊要求用 path 即可,详细可参考:https://blog.youkuaiyun.com/xujin0/article/details/83312406
三种不同的上传方式
表单:
是网站与用户交互的重要渠道。用户可以通过表单实现对数据的上传,修改,可以说是网站给用户的操作借口。后台就可以根据用户提交的表单对数据进行修改操作。Django的表单Forms类可以把数据转化为Python的对象格式,从而进行后续操作。表单有两种,一种是自定义(forms.Form),另一种则是由模型Models创建(forms.ModelForm),表单用 label 描述字段。
使用模板表单的区别
利用模板就可以在模板的定义的时候就写入文件的上传方式,而不用模板则需要在文件上传之后在函数里再次编写文件的上传之后的储存位置。
attrs
为表单的字段增加属性。
enctype=“multipart/form-data”
将文件转换成二进制文件,从而可以实现上传的目的。如果不设置“multipart/form-data”,默认情况下是无法成功上传文件,只能上传文本文件
chunk
从request.FILES中获得的真实的文件。这个字典的每个输入都是一个UploadedFile对象——一个上传之后的文件的简单的包装。
UploadedFile.chunks():如果上传的文件足够大需要分块就返回真。默认的这个值是2.5M,当然这个值是可以调节的。