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)
这就存完了