一、文件上傳
1、通過表單形式上傳文件
1 <form action=' /file_put/' method='post' enctype=' multipart/form-data'> 2 文件名<input type='file' name='file_obj'> 3 <input type='submit'> 4 </form>
表單上傳文件需要設置屬性:enctype
url.py 文件路徑如下:
path('file_put',views.file_put)
視圖函數
1 def file_put(request): 2 #獲取到上傳的文件對象 3 file_obj=request.FILES.get('file_obj') 4 #文件有一個name屬性,獲取文件名稱字符串 5 print(file_obj.name) 6 path=file_obj.name 7 #拼接路徑 8 path=os.path.join(settings.BASE_DIR,'media','img',path) 9 with open(path,'wb') as f : 10 for line in file_obj: 11 f.write(line) 12 13 return HttpResponse('ok')
2、通過Ajax上傳文件
1 文件<input type="file" name="file_obj" id="file"> 2 <input type="button" class="filbtn" value="提交"> 3 <p class="msg"></p> 4 5 <script> 6 $(function () { 7 $('.filbtn').click(function () { 8 var formdata=new FormData(); 9 //拼鍵值對('file_obj':'$('#file')[0].files[0]') 10 //$('#file')[0].files[0]是根據id找到文件 11 formdata.append('file_obj',$('#file')[0].files[0]); 12 $.ajax({ 13 url:'/app01/file_put/', 14 type:'post', 15 // Ajax上傳文件必備參數 16 processData: false , // 不處理數據 17 contentType: false, // 不設置內容類型 18 data:formdata, 19 success:function (response) { 20 if(response=='ok'){ 21 $('.msg').html('上傳成功') 22 } 23 } 24 25 26 }) 27 }) 28 }) 29 </script>
視圖函數同上
二、contentType
contentType在請求頭里,告訴瀏覽器是什么請求格式,
請求格式的分類
urlencoded:默認的請求格式 use='bart'&pwd='123'
formdata:上傳文件
json格式:{‘use’:'Andey','pwd':123}
1 $.ajax({ 2 url:'', 3 type:post, 4 contentType:'json', 5 #序列化發送 6 data:JSON.stringify({ 7 key1:value, 8 key2:value, 9 10 }) 11 12 processData: false , // 不處理數據 13 contentType: false, // 不設置內容類型 14 15 16 })
注:
Django 只解析URLencoded格式的數據
發送json數據只能手動解
解析json數據:
data=request.body.decode('utf8)解碼
json_data=json.loads(data) 反序列化