Django获取多个数据及文件上传

Posted momo8238

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django获取多个数据及文件上传相关的知识,希望对你有一定的参考价值。

1. 选择性别:

1)更新login.html模板

2)views.py中获取客户端提交的数据

 

 

3)当选择性别为“男”后,后台得到了gender=1.

 

2.选择爱好,可以多选,所以后台会获得多个数据。

radio单个数据的获取方法: v1=request.POST.get(\'gender\') 
checkbox多个数据的获取方法: v2=request.POST.getlist
(\'favor\')

1)更新login.html模板

2)views.py中获取客户端提交的数据

 

3)当选择爱好为“篮球,读书”后,后台得到了favor=11,22两个值。

 

3. select标签,默认是单选,也可以多选。不同的方法对应不同的获取函数

 

4. 上传文件

4.1 发现用get的方法只获取到了文件名,却不见文件的内容。其实文件内容没有放到POST里面,而是放到了FILES里面。

本质:上传的时候,所有的内容都上传到了FILES里面了,request.POST.get 只是到FILES里面把文件名取出来了,而没有提取文件内容。

 

4.2

在form表单中上传的有两类数据,

一类是普通数据(字符串),所有数据将在POST里面得到。

一类是文件,form表单中要加上:enctype="multipart/form-data", 表示上传的是文件。所有数据将在FILES中得到。

 

 

拿到的是类的对象,看起来像是个文件名,可以打印一下它的数据类型。

 

 

4.3 拿到文件后保存在服务器上,完成上传的功能。服务器端取数据的时候是分块取的,chunks(中文:块)就是一块一块的集合。

上传文件是一点一点上传的,取数据也是一点一点取的。f=open(obj.name,mode=\'wb\'), 打开一个与上传文件同名的文件,把上传的文件写入进来。

修改views.py程序如下:

 

运行结果,上传成功。

 

4.4 把上传的文件都放到upload文件夹里面。

新建1个upload文件夹

 

插播一下os.path.join的 用法

os.path模块主要用于文件的属性获取,

os.path模块主要用于文件的属性获取.

os.path.join(path1[, path2[, ...]]) 
将多个路径组合后返回,第一个绝对路径之前的参数将被忽略。 
 
>>> os.path.join(\'c:\\\\\', \'csv\', \'test.csv\') 
\'c:\\\\csv\\\\test.csv\' 
>>> os.path.join(\'windows\\temp\', \'c:\\\\\', \'csv\', \'test.csv\') 
\'c:\\\\csv\\\\test.csv\' 
>>> os.path.join(\'/home/aa\',\'/home/aa/bb\',\'/home/aa/bb/c\') 
\'/home/aa/bb/c\' 

 

 修改views.py

 

运行结果,上传成功,并且上传到了指定的upload路径下面

客户端发送请求到服务器端,内容包含请求头,请求尾,请求的内容。

表单是表单,文件是文件。表单的数据全部提取到POST里面,文件的内容会全部提取到FILES里面,所以调用的时候会分开。

 

以上是关于Django获取多个数据及文件上传的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中压缩多个上传的文件,然后再将其保存到数据库?

Django路由系统视图模板

Django 文件上传返回无

Django - 多文件上传数据未插入模型数据库

如何通过 Django 获取上传的文本文件?

[Django] [channels] [python]如何上传静态文件(图像,文档)?