python form表单上传服务器文件_11.Django-form表单上传文件

这里将告诉您11.Django-form表单上传文件,具体操作方法:Django的form表单之文件上传

在生成input标签的时候可以指定input标签的类型为file类型

Title
{{ error_message }}

{% csrf_token %}

此时,在网页上页示如下

aa9d3612d623a4fd410c986cb2ef302a.png

如果网页上提交的是用户名和密码等,通过键值对发送到服务端。

一组键值代表一个标签及标签对应的值。

在网页上选择一张图片,并使用post方式提交,在服务端打印request.POST

def index(request):

if request.method=="POST":

print(request.POST)

return render(request,"index.html",locals())

打印的信息如下:

提交的文件名也在这个字典中,取出这个文件名

def index(request):

if request.method=="POST":

print(request.POST.get("up_file"))

print(type(request.POST.get("up_file")))

return render(request,"index.html",locals())

打印结果如下:

1.png

想取出的是上传的文件,然而取出来的却是上传的文件的文件名

由此可知,上传的文件没有跟form表单提交的数据在一起

因为上传的文件通常大小比较大,所以Django默认会把上传的文件放在一个具体的文件夹中

打印request.FILES的信息

def index(request):

if request.method=="POST":

print(request.POST.get("up_file"))

print(type(request.POST.get("up_file")))

print("files:",request.FILES)

return render(request,"index.html",locals())

打印结果如下

1.png

files:

request.FILES打印的结果是一个空的字典,问题出在上传文件的方式上

由于上传文件时在客户端与服务端传输的是二进制数据,与字符串数据不一样。

传输二进制数据,不管是在form表单,还是在Ajax中,都有自己的传输方式。

在form表单中,上传文件时要使用分片传输的方式。

修改index.html文件

Title
{{ error_message }}

{% csrf_token %}

重新上传文件,在服务端打印信息如下

None

files: ]}>

根据打印结果,request.FILES中可以看到上传的文件

打印结果是一个字典类型,字典的键是form表单中定义的标签的name属性值,而其值是所上传的文件的对象

打印上传文件的对象

def index(request):

if request.method=="POST":

print("files:",request.FILES.get("up_file"))

print(type(request.FILES.get("up_file")))

return render(request,"index.html",locals())

打印结果

files: 1.png

结果显示所取得的文件的类型是一个在内存中的上传文件

获取上传文件在内存中的名字

def index(request):

if request.method=="POST":

print(type(request.FILES.get("up_file")))

file_obj=request.FILES.get("up_file")

print(file_obj.name)

return render(request,"index.html",locals())

打印结果如下

1.png

既然知道了文件在内存中的名字,就可以在服务端写入这个文件

def index(request):

if request.method=="POST":

file_obj=request.FILES.get("up_file")

f1=open(file_obj.name,"wb")

for i in file_obj.chunks():

f1.write(i)

f1.close()

return render(request,"index.html",locals())

再次选择上传文件,提交后,就可以在服务端后台看到所上传的文件

可以在settings.py文件中设定上传文件的路径,或者在打开文件句柄的时候进行路径拼接来把上传的文件保存在指定的目录下11.Django-form表单上传文件就为您介绍到这里,感谢您关注懒咪学编程c.lanmit.com.

本文地址:https://c.lanmit.com/bianchengkaifa/Python/102879.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值