form表单上传文件

form表单上传文件

views

def up(request):
    return render(request,"up.html")

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    <input type="text" name="username">
    <input type="file" name="mufile">
    <input type="submit" name="mufile">
</form>
</body>
</html>

这时候随便选择一个文件发送,结果当然是不成功的。

错误信息

CSRF verification failed. Request aborted.
"CSRF验证失败。请求中止。"

不能发,现在要朝着后端发送post,还是要去把中间件给注释掉,然后再点提交就没问题了,那么后端如何获取post请求的数据, 在request.post里面,这时候还只是拿来了一个字符串,拿不到数据,只是拿到了文件的名字.

form表单上传文件注意事项

1、一定要是post

2、enctype默认是传不了文件的,要把它改成form-data,才能传文件

<form action="" method="post" enctype="multipart/form-data">

然后在传,发现这次连字符串都没有了。

原来内部有个机制,文件不会放在post里面去,因为文件不是一个简单的数据,简单的数据,像普通的字符串什么的,回放在post里面,而复杂的数据会帮你塞到另外一个地方去,就是 request.FILES里面。然后获取文件对象

file_obj = request.FILES.get('传文件的那个name值')

print(file_obj.name)#就能打印出来文件的名字了,说明在这里面,接下来可以存了

with open(file_obj.name,'wb')as f:

	for line in file_obj:

			f.write(line)

这就存完了

posted @ 2019-10-23 22:54  chanyuli  阅读(15877)  评论(0编辑  收藏  举报