基于django和dropzone.js实现上传文件


Posted in Python onNovember 24, 2020

1、dropzone.js

http://www.dropzonejs.com/

dropzone.js是一个可预览\可定制化的文件拖拽上传,实现AJAX异步上传文件的工具

2、dropzone.js前端界面上传方式

官网下载 并且引入dropzone.js和dropzone.css(http://www.dropzonejs.com/)以及引用jquery.js,定义一个class="dropzone"即可完成,

代码示例:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Flask upload with Dropzone example</title>
  <link rel="stylesheet" href="/static/css/dropzone.css" rel="external nofollow" type="text/css" />
  <script src="/static/js/jquery-3.3.1.js"></script>
  <script src="/static/js/dropzone.js"></script>
</head>
<body>

方法1:

<form id ="myAwesomeDropzone" action="{{ request.path }}" class="dropzone" method="POST" enctype="multipart/form-data"></form>
//这段代码是展示dropzone.js的精髓,class一定要是dropzone,id可以自定义
<script type="text/javascript">
    //第二种配置,这种使用的是div做上传区域时使用的配置
    Dropzone.autoDiscover = false;//不知道该行有什么用,欢迎高手下方评论解答
    $("#myAwesomeDropzone").dropzone({
    url: "{{ request.path }}",
    addRemoveLinks: true,
    method: 'post',
    filesizeBase: 1024
    });
</script>

方法2:

<div class="form-group">
  <label class="title">真人照(最多只能传一张)</label>
  <div id="dropz" class="dropzone"></div>//这段代码是展示dropzone.js的精髓,class一定要是dropzone,id可以自定义
</div>
<input type="hidden" name="file_id" ng-model="file_id" id="file_id"/>

<script type="text/javascript">
var appElement = document.querySelector('div .inmodal');
  var myDropzone = new Dropzone("#dropz", {
    url: "{{ request.path }}",//文件提交地址
    method:"post", //也可用put
    paramName:"file", //默认为file
    maxFiles:1,//一次性上传的文件数量上限
    maxFilesize: 2, //文件大小,单位:MB
    acceptedFiles: ".jpg,.gif,.png,.jpeg", //上传的类型
    addRemoveLinks:true,
    parallelUploads: 1,//一次上传的文件数量
    //previewsContainer:"#preview",//上传图片的预览窗口
    dictDefaultMessage:'拖动文件至此或者点击上传',
    dictMaxFilesExceeded: "您最多只能上传1个文件!",
    dictResponseError: '文件上传失败!',
    dictInvalidFileType: "文件类型只能是*.jpg,*.gif,*.png,*.jpeg。",
    dictFallbackMessage:"浏览器不受支持",
    dictFileTooBig:"文件过大上传文件最大支持.",
    dictRemoveLinks: "删除",
    dictCancelUpload: "取消",
    //对一些方法的后续处理
    init:function(){
      this.on("addedfile", function(file) {
        //上传文件时触发的事件
        document.querySelector('div .dz-default').style.display = 'none';
      });
      this.on("success",function(file,data){
        alert(data.data)
        //上传成功触发的事件
        console.log('ok');
      });
      this.on("error",function (file,data) {
        //上传失败触发的事件
        console.log('fail');
        var message = '';
        //lavarel框架有一个表单验证,
        //对于ajax请求,JSON 响应会发送一个 422 HTTP 状态码,
        //对应file.accepted的值是false,在这里捕捉表单验证的错误提示
        if (file.accepted){
          $.each(data,function (key,val) {
            message = message + val[0] + ';';
          })
          //控制器层面的错误提示,file.accepted = true的时候;
          alert(message);
        }
      });
      this.on("removedfile",function(file){
        //删除文件时触发的方法(向后台发送删除文件请求)
{#        $.post('/admin/del/'+ file_id,{'_method':'DELETE'},function (data) {#}
{#          console.log('删除结果:'+data.message);#}
{#        })#}

        document.querySelector('div .dz-default').style.display = 'block';
      });
    }
  });
</script>
</body>
</html>

方法二中,很多参数是不一定需要定义的,参见方法一

3、后台处理dropzone.js前端界面上传的文件

A、django的settings.py 文件定义上传文件夹:

#文件上传文件夹定义
ENROLLED_DATA = '%s/statics/enrolled_data' %BASE_DIR

B、对应的view处理前端上传过来的数据:

from django.views.decorators.csrf import csrf_exempt
from PerfectCRM.settings import *
import os
@csrf_exempt
def upload(request):
  if request.method =='POST': #post方式
    if request.is_ajax():  #如果是ajax请求
      if not os.path.exists(ENROLLED_DATA): #如果settings定义的 上传文件夹不存在
        os.makedirs(ENROLLED_DATA,exist_ok=True) #新建文件夹
      for k,file_obj in request.FILES.items(): #获取前端传过来的文件数据
        with open('%s/%s'%(ENROLLED_DATA,file_obj.name),"wb") as f: #打开文件
          for chunk in file_obj.chunks():   
            f.write(chunk)  #chunk方式写入文件
  return render(request, 'dropzone-back.html')

C、上传成功:

基于django和dropzone.js实现上传文件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
python绘制立方体的方法
Jul 02 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
pybind11和numpy进行交互的方法
Jul 04 Python
解决使用export_graphviz可视化树报错的问题
Aug 09 Python
python tkinter组件摆放方式详解
Sep 16 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
如何在python中处理配置文件代码实例
Sep 27 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 #Python
Django web自定义通用权限控制实现方法
Nov 24 #Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 #Python
Pycharm安装python库的方法
Nov 24 #Python
python opencv角点检测连线功能的实现代码
Nov 24 #Python
python+appium+yaml移动端自动化测试框架实现详解
Nov 24 #Python
Python利用myqr库创建自己的二维码
Nov 24 #Python
You might like
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
Symfony的安装和配置方法
2016/03/17 PHP
jquery 面包屑导航 具体实现
2013/06/05 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
决策树的python实现方法
2014/11/18 Python
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
python实现学员管理系统
2019/02/26 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
手写一个python迭代器过程详解
2019/08/27 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
python实现电子词典
2020/03/03 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
瑞士国际航空官网:SWISS
2016/07/21 全球购物
Shell如何接收变量输入
2016/08/06 面试题
小学生勤俭节约演讲稿
2014/08/28 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
个人作风建设总结
2014/10/23 职场文书
医院科室评语
2015/01/04 职场文书
单位实习鉴定评语
2015/01/04 职场文书
2015年暑期见闻
2015/07/14 职场文书
警用民用对讲机找不同
2022/02/18 无线电