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