如何在 Django 中上传 AJAX 视频

Posted

技术标签:

【中文标题】如何在 Django 中上传 AJAX 视频【英文标题】:How to AJAX video upload in Django 【发布时间】:2020-04-02 03:24:33 【问题描述】:

好的,所以我已经发布了这个,我现在正在尝试隔离这个问题..

我试图简单地提交一个表单并在成功时显示一个警报(只是为了验证我的代码是否有效)。我是 Jquery/JS 的新手。当我将我的代码注释掉时,未注释的代码有效:

$(document).ready(function()
    var $myForm = $('.form')
    $myForm.addClass('site-yellow')

    $('.form').on('submit', function(event)

        event.preventDefault();
        var form = $(event.target)
        var formData = new FormData(form[4]);
                alert("Video done!");

//        $.ajax(
//            type : 'POST',
//            url : "% url 'videos-upload' %",
//            data : 
//            data : formData,
//            csrfmiddlewaretoken: ' csrf_token ',
//            
//            success : function()
//            
//        );
    );
);

一旦我取消注释代码,整个事情就会中断..但我似乎无法弄清楚..

我的看法:

class VideoUploadView(PermissionRequiredMixin, LoginRequiredMixin, FormView):
    form_class = VideoUploadForm
    success_url = '/videos'
    template_name = 'videos/video_form.html'

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            # stuff
            form.save()
            messages.success(self.request, self.success_message)
            return redirect(self.success_url)
        return render(request, self.template_name, 'form': form)

我的 HTML:

        <form class="form" enctype="multipart/form-data" method="POST">
            % csrf_token %
            <div class="form-row mt-4 mb-4">
                <div class="form-group col-md-12 mb-0">
                     form|as_crispy_field 
                </div>
            </div>
            <div class="form-row mt-4">
                <button class="btn btn-warning" type="submit">Save Video</button>
            </div>
        </form>

我需要做什么才能获得提交表单的 AJAX 请求?

【问题讨论】:

“整件事都坏了”是什么样子的? 视频上传正常。没有警报。没有新的课程被应用。抱歉,我应该更明确一点。 【参考方案1】:

JS:

$.ajax( 
type: 'POST', 
url: '% url "upload-videos" %', 
enctype: 'multipart/form-data',
processData: false,
contentType: false,
data: new FormData(this) ,
    success: function(data)
    alert('Success')
    

在你的views.py中,你需要接收json:

if request.method == 'POST':
    form = self.form_class(request.POST, request.FILES)
    if form.is_valid():
         print("done")

【讨论】:

请问为什么datatype是json?这是一个视频上传。这是正确的吗? 不,不是...我刚刚编辑了我的答案...应该可以工作.. 没关系。我让它工作。我必须做的是将 URL 更改为 form.attr('action'),,因为模板中已经设置了 form action。关于学习 JS/Jquery 的好地方有什么建议吗? youtube 上的 Travesty Media 很不错...如果您会 C 或 Java,它会很快... 我没有。只是 Python。这似乎不太难,但我对 HTML 不是很流利 - 因此这个问题。我没有意识到它需要编码类型,因为我认为 HTML 中的表单仍然可以处理这个问题。我假设表单不再处理这个问题的原因是因为 event.preventDefault() 函数。我会阅读它。再次感谢。

以上是关于如何在 Django 中上传 AJAX 视频的主要内容,如果未能解决你的问题,请参考以下文章

上传文件后,如何在 Django 中使用 AJAX 更新表(与 JavaScript 链接)?

如何使用 Django 和 AJAX 显示上传的图像

如何从 Django 视图中获取价值到 Ajax 成功函数中

将通过 ajax 上传的文件保存到 Django 模型 ImageField

Django ajax jquery 文件上传

Django - 如何使用 JQuery Ajax 插入多个表单数据