前端bootstrap+fileInput+django后端是用ajax方式上传form表单数据及多个文件保存到数据库

前端部分:

简介:

一款非常优秀的HTML5文件上传插件,支持bootstrap 3.x

和4.x版本,具有非常多的特性:多文件选择。这个插件能最简单的帮你完成文件上传功能,且使用bootstrap样式。还支持多种文件的预览,images,
text, html, video, audio,
flash。另外还支持ajax方式上传文件,可以看到上传进度。支持拖拽的方式添加和删除文件。

一、下载bootstrap-fileinput

下载bootstrap-fileinput

参数的配置可以参考:https://blog.csdn.net/u012526194/article/details/69937741/
或者中文官网:http://www.bootstrap-fileinput.com/options.html

二、创建一个web项目,引入js、css文件

<script src="{% static 'resource/js/config.js' %}" type="text/javascript"></script>
<script src="{% static 'resource/libs/easyUI/easyui-lang-zh_CN.js' %}" type="text/javascript"></script>
<script src="{% static 'resource/libs/easyUI/jquery.easyui.min.js' %}" type="text/javascript"></script>
<script src="{% static 'resource/libs/fileInput/js/fileinput.js' %}" type="text/javascript"></script>
<script src="{% static 'resource/libs/fileInput/js/locales/zh.js' %}" type="text/javascript"></script>

我使用的是django+ boostrap
————————————————

html

<form id="newChangeRequestForm" method="post" class="container" enctype="multipart/form-data">
	.........
    <div class="form-group">
        <label class="font-weight-bold">Add attachments:</label>
        <input name="uploadFile" type="file" id="uploadFile" multiple class="file-loading"/>
        <span>支持jpg, jpeg, png, gif, pdf, doc, docx, xls, xlsx, ppt, pptx, zip, rar, txt格式,大小不超过50M</span>
    </div>
    <div class="col-6 mb-3 text-right">
        <input
                class="btn btn-primary"
                id="SubmitTest"
                type="button"
                value=" SubmitTest"
                onclick="checkSubmitTest()"
        />
    </div>
</form>

js

var fileList = []
var isFirstSelect = true

$(function () {
    //初始化fileinput
    var fileInput = new FileInput();
    fileInput.Init("uploadFileId", '');
});

//初始化fileinput
var FileInput = function () {
    var oFile = new Object();

    //初始化fileinput控件(第一次初始化)
    oFile.Init = function (ctrlName, uploadUrl) {
        var control = $('#' + ctrlName);

        //初始化上传控件的样式
        control.fileinput({
            layoutTemplates: {
                // footer:'',//隐藏全部小图标;
                // actionUpload: '',//去除上传预览缩略图中的上传图片;
                indicator: '', //去除上传状态图标(左侧➕)
                actionDrag: '',//去除拖动图标(通常编辑的时候会显示这个图标)
                actionDelete:'',//去除删除图标
                //其他 参考fileinput.js/fileinput.min.js中 搜索 layoutTemplates,可以看到模板内所有元素  需要改哪个,直接在这里赋空字符串就行了
            },
            language: 'zh', //设置语言
            theme: "fa",
            uploadUrl: uploadUrl, //上传的地址
            allowedFileExtensions: ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx',
                                    'zip', 'rar', 'txt', 'bmp', 'html'], //接收的文件后缀
            uploadAsync: true, //默认异步上传

            showUpload: false, //是否显示上传按钮
            showRemove: true, //显示移除按钮
            showCaption: true, //是否显示标题

            dropZoneEnabled: true, //是否显示拖拽区域
            initialPreviewAsData: true,

            maxFileSize: 1024 * 50,//单位为kb,如果为0表示不限制文件大小,10M
            //minFileCount: 0,
            maxFileCount: 10, //表示允许同时上传的最大文件个数
            // maxFilesNum: 3, //表示允许同时上传的最大文件个数
            msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
            enctype: 'multipart/form-data',
            overwriteInitial: false,
            autoReplace: true, //自动替换

            browseClass: "btn btn-primary", //按钮样式: btn-default、btn-primary、btn-danger、btn-info、btn-warning
            previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",

        }).on('filebatchselected', function (evt, file) {
            if (isFirstSelect) {
                isFirstSelect = false
                $.messager.alert("提示", '目前文件只支持一次性选择,再次选择文件将会覆盖原来的文件!', "warning")
            }
        });
        //文件上传完成之后发生的事件
        $("#uploadFileId").on("fileuploaded", function (event, data, previewId, index) {
            console.log(data)
            console.log(data.response.msg)
            var msg = data.response.msg
            $.messager.alert("提示", msg, "warning");
        });
    }
    return oFile;	//这里必须返回oFile对象,否则FileInput组件初始化不成功
};


function SubmitChangeRequestForm() {
	var formData = new FormData($("#newChangeRequestForm")[0]);
	// $("#uploadFileId").fileinput("upload");  // 单独上传文件接口
    submitForm(formData);
}

function submitForm(formData) {
    // var form = document.forms[0];
    console.log(formData)
    // var jsonData = JSON.stringify(formData);
    $.ajax({
        url: server_url + '/new_change_request/',
        method: 'POST',
        data: formData,
        dataType: "json",
        processData: false,
        contentType: false,
        cache: false,
        success: function (data) {
            console.log("data:" + data);
            console.log("data:" + data.res);
            if (data.status === 200) {
                $.messager.alert("提示", data.msg, "info");
                console.log("data:" + data.msg);
                // window.setTimeout("window.location=server_url+'/new_change_request'", 1500);
                // window.setTimeout("window.location=server_url+'/cp_index'", 1500);
                return;
            }
            console.log(data)
            $.messager.alert("提示", data.msg, "info");
        },
        //请求失败,包含具体的错误信息
        error: function (data) {
            console.log(data.msg);
        }
    });

}

Django后端部分

models

from django.db import models


class BaseModel(models.Model):
    """为模型类补充字段"""

    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
    created_date = models.DateField(verbose_name="创建日期", auto_now_add=True)

    class Meta:
        abstract = True  # 说明是抽象模型类, 用于继承使用,数据库迁移时不会创建BaseModel的表
        
class File(BaseModel):
    def generate_filename(self, filename):
        url = "files/{}".format(filename)
        return url

    file = models.FileField(upload_to=generate_filename)
    filename = models.CharField(verbose_name="文件名称", max_length=128, blank=True, null=True)
    suffix = models.CharField(max_length=20, verbose_name='后缀', blank=True, null=True)
    is_deleted = models.BooleanField(default=False)

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE, blank=True, null=True)
    object_id = models.PositiveIntegerField(blank=True, null=True)
    content_object = GenericForeignKey('content_type', 'object_id')

    class Meta:
        verbose_name = '文件'

    def __str__(self):
        return self.filename

views视图

class NewChangeRequest(LoginRequiredJSONMixin, View):
    @transaction.atomic
    def post(self, request):
        print(request.FILES)
        print(request.POST)
        print(request.POST.get('title'))
        files_obj = request.FILES.getlist('uploadFile')
        print(type(files_obj), files_obj)
        for file in files_obj:
            filename = file.name
            suffix = filename.rsplit(".", 1)[1]
            file = File(file=file, filename=filename, suffix=suffix)
            file.save()
        data = {"data":'data!', 'msg':'文件保存成功!', 'status': 200}
        return JsonResponse(data)

这里主要介绍文件保存的方法,form表单数据存入同理,有时间会在更新一篇

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 协同过滤算法是一种常用的个性化推荐算法,在电商、视频播放等领域被广泛应用。基于bootstrap、Python和Django开发的个性化视频推荐系统.zip是一个应用了协同过滤算法的视频推荐系统的压缩文件。 这个推荐系统具有以下特点和功能: 1. 基于bootstrap前端界面:使用bootstrap框架,系统界面美观、响应式,能够在不同设备上良好显示。 2. 使用Python编程语言:系统的后端使用Python进行开发,Python具有良好的数据处理能力和丰富的第三方库,适合开发数据密集型应用。 3. 使用Django框架:Django是一个功能强大的Python Web框架,系统基于Django开发,提供了快速开发和灵活的数据库操作等功能。 4. 协同过滤算法实现个性化推荐:协同过滤算法是基于用户行为数据来进行推荐的,根据用户的历史行为和其他用户的行为进行相似性计算,从而推荐用户可能感兴趣的视频。 5. 数据库存储和管理:系统使用数据库来存储用户信息、视频信息和用户行为数据,能够高效地进行数据检索和管理。 6. 视频推荐和展示:系统能够根据用户的兴趣进行视频推荐,并将推荐结果展示给用户。用户可以根据推荐结果进行视频播放和评价等操作。 7. 用户反馈和评价功能:用户可以对观看过的视频进行评价和评论,系统可以根据用户的反馈来不断优化推荐结果。 通过以上功能和特点,基于bootstrap、Python和Django的协同过滤算法的个性化视频推荐系统.zip能够为用户提供个性化的视频推荐,提高用户的观看体验和满意度。系统具有良好的扩展性和可维护性,方便二次开发和定制化需求。 ### 回答2: 基于Bootstrap、Python和Django的协同过滤算法的个性化视频推荐系统.zip是一个压缩文件,其中包含了一个使用Bootstrap前端框架、Python编程语言和Django框架开发的个性化视频推荐系统。 协同过滤算法是一种常用的推荐算法,该系统利用协同过滤算法来为用户推荐他们可能喜欢的视频内容。 该系统的主要功能包括用户注册与登录、个人资料管理、视频浏览与搜索、视频评分与评论、推荐视频等。用户可以通过注册并登录系统来创建和管理个人资料,以便系统可以根据他们的兴趣和喜好进行个性化的推荐。 系统通过分析用户的观看历史和评分数据,运用协同过滤算法来计算用户之间的相似度,并找到与当前用户兴趣相似的其他用户。然后,系统将根据相似用户的喜好,推荐他们喜欢的视频给当前用户。 为了提高用户体验,系统使用了Bootstrap前端框架来创建响应式的用户界面。这样,用户无论是在桌面还是移动设备上访问系统,都能获得良好的用户体验。 系统还使用了Python编程语言和Django框架来实现系统的后端逻辑和数据库管理。Python是一种功能强大且易于学习的编程语言,而Django是一个流行的Python框架,提供了许多用于快速开发Web应用程序的工具和功能。 通过将这三种技术结合起来,基于Bootstrap、Python和Django的协同过滤算法的个性化视频推荐系统.zip提供了一种简单且可扩展的解决方案,用于为用户提供个性化的视频推荐服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天下·第二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值