django文件——django + jquery-file-upload上传篇(二)-- 插件实现文件上传+进度条显示 +拖入文件上传...

django + jquery-file-upload 插件实现文件上传+进度条显示

1.model.py

class Fujian(models.Model):
    name = models.CharField(max_length=32,verbose_name="附件名称")
    file = models.FileField(upload_to="upload/%Y/%m/%d/")
    uploaded_at = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return self.name

2.forms.py

class FujianForm(forms.ModelForm):
    class Meta:
        model = Fujian
        fields = ('file',)

3.views.py

def fujian_add(request):
    if request.method == 'POST':
        form = FujianForm(request.POST,request.FILES)
        if form.is_valid():
            fujian = form.save()
            data = {'is_valid':True,'name':fujian.file.name,'url':fujian.file.url}
        else:
            data = {'is_valid':False}
        return JsonResponse(data)

    if request.method == 'GET':
        return render(request,"fujian_add.html")

4.fujian_add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>附件上传</title>
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <script src="/static/js/jquery.min.js"></script>
    <script src="/static/js/jquery-ui.min.js"></script>
    <script src="/static/bootstrap/js/bootstrap.js"></script>
    <script src="/static/jquery-file-upload/vendor/jquery.ui.widget.js"></script>
    <script src="/static/jquery-file-upload/jquery.iframe-transport.js"></script>
    <script src="/static/jquery-file-upload/jquery.fileupload.js"></script>
    <script src="/static/js/base.js"></script>
</head>
<body>
<div class="container">
    <h1>图片上传</h1>
    <form method="post" action="">
        {% csrf_token %}
        <input type="hidden" name="next" value="{{ request.path }}">
        <button type="submit" class="btn btn-danger pull-right">
            <span class="glyphicon glyphicon-trash"></span> 清空数据
        </button>
    </form>
    <div>
        <div style="margin-bottom: 20px;">
            {# 1. 添加附件的按钮 #}
            <button type="button" class="btn btn-primary js-upload-photos">
                <span class="glyphicon glyphicon-cloud-upload"></span> 上传附件
            </button>

            {# 2. 上传图片的插件 #}
            <input id="fileupload" type="file" name="file" multiple
                   style="display: none;"
                   data-url="/fujian/add/"
                   data-form-data='{"csrfmiddlewaretoken": "{{ csrf_token }}"}'>
        </div>

        {# 3. 显示上传的文件 #}
        <table id="gallery" class="table table-bordered">
            <thead>
            <tr>
                <th>Photo</th>
            </tr>
            </thead>
            <tbody>
            </tbody>
        </table>
    </div>
</div>
<!--进度条模态框-->

<div class="modal fade" id="modal-progress" data-backdrop="static" data-keyboard="false">
    <div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Uploading...</h4>
</div>
<div class="modal-body">
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 0%;">0%</div>
</div>
</div>
</div>
</div>
</div>
</body> </html>

页面效果:

5.需要引入jquery-file-upload的js文件

 

<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/jquery-ui.min.js"></script>
<script src="/static/bootstrap/js/bootstrap.js"></script>
<script src="/static/jquery-file-upload/vendor/jquery.ui.widget.js"></script>
<script src="/static/jquery-file-upload/jquery.iframe-transport.js"></script>
<script src="/static/jquery-file-upload/jquery.fileupload.js"></script>
<script src="/static/js/progress-bar-upload.js"></script>

 

 

 

6.urls.py文件

 

from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^fujian/add/$', views.fujian_add),
]

 7.progress-bar-upload.js

$(function () {
    $(".js-upload-photos").click(function () {
        $("#fileupload").click();
    });

    $("#fileupload").fileupload({
        dataType: 'json',
        sequentialUploads: true,  /* 1. SEND THE FILES ONE BY ONE 这个属性指示该组件一次发送一个文件*/

        start: function (e) {   /* 2. WHEN THE UPLOADING PROCESS STARTS, SHOW THE MODAL */
            $("#modal-progress").modal("show");
        },

        stop: function (e) {  /* 3. WHEN THE UPLOADING PROCESS FINALIZE, HIDE THE MODAL */
            $("#modal-progress").modal("hide");
        },

        progressall: function (e, data) {  /* 4. UPDATE THE PROGRESS BAR */
            var progress = parseInt(data.loaded / data.total * 100, 10);
            var strProgress = progress + "%";
            $(".progress-bar").css({"width": strProgress});
            $(".progress-bar").text(strProgress);
        },

        done: function (e, data) {
            if (data.result.is_valid) {
                $("#gallery tbody").prepend(
                    "<tr><td><a href='" + data.result.url + "'>" + data.result.name + "</a></td></tr>"
                )
            }
        }
    });
});

效果:

 

拖入文件上传:

在fujian_add.html下面加上以下代码:

<div class="well text-muted text-center" style="padding-top: 4rem; padding-bottom: 4rem;">
     <span class="glyphicon glyphicon-arrow-down" style="font-size: 4rem;"></span>
     <h3>拖入文件上传</h3>
</div>

 

效果:

 

转载于:https://www.cnblogs.com/pyghost/p/10832452.html

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Python+Django实现文件上传的简单步骤: 1. 创建Django项目和应用 可以使用Django自带的命令创建: ``` django-admin startproject myproject cd myproject python manage.py startapp myapp ``` 2. 配置上传文件的路径 在`settings.py`中配置上传文件的路径: ``` MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' ``` 3. 创建文件上传表单 在`myapp`目录下,创建一个`forms.py`文件,定义一个文件上传表单: ``` from django import forms class UploadForm(forms.Form): title = forms.CharField(max_length=50) file = forms.FileField() ``` 4. 创建文件上传视图 在`myapp`目录下,创建一个`views.py`文件,定义一个文件上传视图: ``` from django.shortcuts import render from django.http import HttpResponseRedirect from myapp.forms import UploadForm def upload(request): if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if form.is_valid(): title = form.cleaned_data['title'] file = form.cleaned_data['file'] # 处理上传文件 return HttpResponseRedirect('/success/') else: form = UploadForm() return render(request, 'upload.html', {'form': form}) ``` 5. 创建文件上传模板 在`myapp`目录下,创建一个`templates`目录,并在其中创建一个`upload.html`模板文件,用于渲染文件上传表单: ``` {% extends 'base.html' %} {% block content %} <h1>Upload File</h1> <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="Upload"> </form> {% endblock %} ``` 6. 配置URL路由 在`myapp`目录下,创建一个`urls.py`文件,定义文件上传视图的URL路由: ``` from django.urls import path from myapp.views import upload urlpatterns = [ path('upload/', upload, name='upload'), ] ``` 7. 运行Django服务器 在命令行中执行如下命令,启动Django服务器: ``` python manage.py runserver ``` 现在可以访问`http://127.0.0.1:8000/myapp/upload/`,上传文件并处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值