如何在 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 成功函数中