Django Ajax上载程序400 badreques

2024-04-25 00:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在已提交.html JS也被一个文档准备就绪功能

var uploader = new qq.FileUploader({
            action: "{% url 'QCOMLTE:imager' %}",
            element: $('#file-uploader')[0],
            multiple: true,
            onComplete: function(id, fileName, responseJSON) {
                if(responseJSON.success) {
                    alert("success!");
                } else {
                    alert("upload failed!");
                }
            },
            onAllComplete: function(uploads) {
                // uploads is an array of maps
                // the maps look like this: {file: FileObject, response: JSONServerResponse}
                alert("All complete!");
            },
            params: {
                'csrf_token': "{{  csrf_token }}",
                'csrf_name': 'csrfmiddlewaretoken',
                'csrf_xname': 'X-CSRFToken'
            }
        });

html正文中的其他位置

^{pr2}$

在网址.py在

urlpatterns = patterns('',
                   url(r"^Submitted/$", views.HybridDetailView.as_view(), name='Submitted'),
                   url(r'^(?P<object_type>\w+)/process/$', views.process, name='process'),
                   url(r'^(?P<object_type>\w+)/$', views.generic_view, name='generic'),
                   url("$^", views.head, name='head'),
                   url("uploader", views.upload, name= 'imager'),
)

在视图.py在

@AjaxFileUploader
def upload(request):
    response = {'files': []}
    script_dir = os.path.dirname(__file__)
    # Loop through our files in the files list uploaded
    print('request',request)
    print(request.FILES)
    for item in request.FILES.getlist('files[]'):
        file = UploadedFile(item)
        with open(script_dir + '/Excel/' + file.name) as destination:
            for chunk in file.chunks():
                destination.write(chunk)
        response['files'].append(file)
        print('appended')

return HttpResponse(json.dumps(response), content_type='application/json')

在已安装的应用程序列表中还包含“ajaxuploader”

当我试图通过按钮提交一个文件时,它会发送post调用,但是收到一个400(错误请求)错误。 据我所知,它甚至没有到达python,至少视图代码没有。它似乎正确地形成了请求URL

http://localhost:8000/QCOMLTE/uploader?qqfile=powered_by.png

当你转到URL时,它会发送一条消息,声明只允许post调用。 这类似于Default django-ajax-uploader with s3 backend gives MalformedXML error 只是我没有使用任何后端,只是尝试获取文件并将它们保存到一个目录中。在

更新8/25/14: 把装饰工从视野中移走了。这将导致未发送错误。打印请求后,文件将被发送到GET路径而不是文件路径。我不知道该怎么改变。在


Tags: 文件nameinurlresponserequesttypefiles
1条回答
网友
1楼 · 发布于 2024-04-25 00:16:47

找到这个Need a minimal Django file upload example

与之前我试图通过ajax/POST来查找的请求不同,实际上我是在使用ajax/POST来查找的。JQuery是

       $('#uploadform').submit(function (e){
            console.log('submitting')
            var data = new FormData($('#uploadform').get(0));

            $.ajax({
                type: 'POST',
                url: "{% url 'QCOMLTE:imager' %}",
                data: data,
                success: function(data){console.log(data)},
                error: function(data){console.log(data)},
                cache: false,
                processData: false,
                contentType: false
            });
            e.preventDefault()
        });

但类型在URL之下。 我试着把它改成一个$.post请求,但它试图发布到错误的URL然后。。。 所以我决定把它改回来,这次把type放在ajax调用的顶部。然后它成功了。。。而且经过多次测试还是可以的。在

相关问题 更多 >