前端使用django 上传文件,图片,视频等-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1637541
  • 博文数量: 63
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 646
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-26 18:02
个人简介

祸兮福之所倚,福兮祸之所伏

文章分类

全部博文(63)

文章存档

2020年(11)

2019年(10)

2017年(10)

2016年(25)

2015年(7)

我的朋友
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: python/ruby

2017-03-09 16:09:00

      前端使用django上传文件有两种方式,一种是使用form形式,另一种是使用html实现。
     
     第一种使用form 
       
     url定义    
    ,
    models定义
    定义数据库表

点击(此处)折叠或打开

  1. class users(models.model):
  2.     username = models.charfield(max_length=20)
  3.     headimg = models.filefield(upload_to='file') #定义上传的路径,相对于settings中的media_root路径
  4.     def __str__(self):
  5.         return self.username
定义form表类型

点击(此处)折叠或打开

  1. class userform(forms.form):
  2.     username = forms.charfield()
  3.     headimg = forms.filefield()

     views函数

点击(此处)折叠或打开

  1. def form(request):
  2.     if request.method == 'post':                       #定义访问的方法,上传一般都使用post方法     
  3.         ul = userform(request.post,request.files)      #获取上传的访问数据,使用user_form 定义获取对象           
  4.         if ul.is_valid():                               # 判断上传信息是否有效  
  5.             username = ul.cleaned_data['username']     #获取数据
  6.             headimg = ul.cleaned_data['headimg']
  7.             user= users()                              #定义数据库对象 
  8.             user.username = username                   #定义数据库信息   
  9.             user.headimg = headimg
  10.             user.save()                                #保存到数据库 
  11.             return httpresponse('upload ok')
  12.     else:
  13.         ul = userform                                   #定义表单空对象
  14.     return render(request,'login.html',locals())
        
  html页面
       
基于csrf认证的页面(csrf是防跨站请求攻击),函数必须用render返回模板,在表单中添加标签
{% csrf_token %}

点击(此处)折叠或打开

  1. <form method="post" action="/form/" enctype="multipart/form-data">
  2.         {% csrf_token %}
  3.        {{ ul.as_p }}
  4.        <input type="submit" value="upload">
  5.    </form>

访问form路径

上传过后数据库显示

表示已经上传成功



第二种使用html5 实现,models还是使用上面的users
      
        前端html页面   

点击(此处)折叠或打开

  1. <form action="/uploadfile/" method="post" enctype="multipart/form-data">   #必须定义enctype
  2.        
  3.        <input type="file" name="myfile" >
  4.        <br>
  5.        <input type="submit" value="upload">
  6.    </form>
         

  对应的视图处理函数

点击(此处)折叠或打开

  1. def uploadfile(request):
  2.     if request.method == 'post':   
  3.         username = request.post['username']                           #获取username
  4.         myfile = request.files.get('myfile',none)                     #获取files二进制流,如果没上传为none
    1.     
  5.         filename = os.path.join(upload_file,myfile.name).replace('\\','/')       #定义上传的文件名(绝对路径),uploadfile为settings中定义的文件上传路径
  6.         if not myfile:                                                        
  7.             httpresponse('no files for upload'
  8.         dest = open(filename,'wb ')                                    #创建一个文件,使用二进制模式打开,并写入文件流
  9.         try:
  10.             for chunk in myfile.chunks():
  11.                 dest.write(chunk)
  12.         finally:
  13.             dest.close()
  14.         user=users()                                                   #存储到数据库,img为存储的文件名,使用时,加上上传文件路径即可
  15.         user.username = username
  16.         user.headimg = myfile.name 
  17.         return render_to_response('login.html',{'file':myfile.name })   #上传后返回页面


     myfile的属性:
        myfile.read():从文件中读取整个上传的数据,这个方法只适合小文件

           myfile.chunks():按块返回文件,通过在for循环中进行迭代,可以将大文件按块写入到服务器中;

           myfile.multiple_chunks():这个方法根据myfile的大小,返回true或者false,当myfile文件大于2.5m(默认为2.5m,可以调整)时,该方法返回true,否则返回false,因此可以根据该方法来选择选用read方法读取还是采用chunks方法:

             if myfile.multiple_chunks() == false:

             # 使用myfile.read()

             else:

             # 使用myfile.chunks()

           myfile.name:这是一个属性,不是方法,该属性得到上传的文件名,包括后缀,如123.exe;

          myfile.size:这也是一个属性,该属性得到上传文件的大小。


文件上传就到此。部分转载。


阅读(7227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图