Django不从查询中下载文件

wztqucjr  于 2023-04-22  发布在  Go
关注(0)|答案(1)|浏览(119)

我有一个Django应用程序,我需要允许用户下载一个查询生成的日志文件。我已经为下载创建了一个视图,我生成了文件-但是一旦客户端按下按钮( AJAX 调用),什么都不会下载。
我的观点如下:

def download_rollback(request):
    serial = request.POST.get('serial')
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="{}.csv"'.format(serial)

    writer =  csv.writer(response)
    writer.writerow(['timestamp','serial','log'])
    
    queryset = ConfigLog.objects.filter(ser_no=serial).filter(log__contains='ROLLBACK')
    for obj in queryset:
        writer.writerow([obj.timestamp, obj.ser_no, obj.log])

    return response

我有下面的urls.py:

urlpatterns = [
    ...
    path('beaconing/download_rollback/', views.download_rollback,name='download_rollback'),
    ...
]

我已经遵循了各种教程来尝试这一点-他们都指向类似上述的东西,但没有一个工作。
下面是我 AJAX 请求:

function Download(ser_no){
  console.log('AJAX');
        $.ajax({
                type: 'POST',
                url: '{% url "beacon_server:download_rollback" %}', 
                data: {
                            serial: ser_no,
                            type: "Download",
                  csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
                  action: 'post'
                },
                success: function (json) {
   
                    },
                    error: function (xhr,errmsg,err) {

                    }
                });
            }
nc1teljy

nc1teljy1#

首先要注意的是,它应该是一个get请求,而不是post,因此相应地更改您的python函数。serial = request.POST.get('serial')serial = request.GET.get('serial')
然后,而不是通过 AJAX 发送请求,尝试这种方式

function Download(ser_no){
    location.href = '/beaconing/download_rollback/?serial='+ser_no
}

相关问题