文件上傳&ContentType請求格式


一、文件上傳

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) 反序列化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM