使用django / jquery创建和下载zip文件

时间:2019-04-23 09:58:05

标签: jquery ajax django python-3.x shutil

如果这是一个重复的问题,请随时标记。我有一些需要发送给客户的数据(他在我的网站上的个人数据)。所以我创建了一个链接:在html文件中导出:

<a href="#" class="export-data">export<i class="ft-download"></i></a>

这是我的jquery函数:

$(document).on('click', '.export-data', function(){
// get selected data and send list to backend
var data= []
$('.group-check-data').each(function(){
    var checked = $(this).is(':checked');
    if (checked == true){
        data.push($(this).attr("data-id"));
    }
});
console.log(data);
var json_data = {'csrfmiddlewaretoken' : $('.url-csrf').attr('data-csrf'), 'list-data': data};
$.ajax({
    type:'POST',
    url : $('.url-export-selected-data').attr('data-url-export-selected-data'),
    data : json_data,
    success : function(response){
        $('.result').attr('href', response);
        console.log(response);

    }
});
});

这是我的观点:

def export_data(request):
    user = get_object_or_404(User, username=request.session['username'])
    # TODO: generate json of selected data
    for key in request.POST.keys():
        if key == "list-data[]":
            list = request.POST.getlist(key)
            for item in list:
                path = os.path.join(EXPORT_FOLDER, 'user_{}', 'data_{}').format(user.id, int(item))
                try:
                    shutil.rmtree(os.path.join(EXPORT_FOLDER, 'user_{}', 'data_{}').format(user.id, int(item)))
                except:
                    print("directory does not exist")
                if not os.path.exists(path):
                    os.makedirs(path)
                generate_data(user.id, int(item))

    # TODO: create zip file and export it to user
    archive = shutil.make_archive(os.path.join(EXPORT_FOLDER, 'user_{}', 'compressed').format(user.id), 'zip',
                              os.path.join(EXPORT_FOLDER, 'user_{}').format(user.id))

    response = HttpResponse(archive, content_type='application/zip')
    response['Content-Disposition'] = 'attachment; filename=foobar.zip'
    return response

我无法向用户显示下载窗口,我尝试添加此链接<a href="#" class="result">Result</a>并将响应放入其href中,但是我在计算机中放置了本地位置(以D开头:not使用localhost:8000网址)。

我将我的工作上传到服务器上,我的网址是localhost:8000,但是添加了/ code /,我不知道如何。当我删除/ code /并尝试访问zip文件时,出现django错误:Page not found

Request URL: http://localhost:8000/exported/user_1/compressed.zip

我是django的新手,我觉得这里有点缺。 谢谢。

0 个答案:

没有答案