文件上传&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:默认的请求格式 ues='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) 反序列化

转载于:https://www.cnblogs.com/liaopeng123/p/9879869.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值