我有一个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) {
}
});
}
1条答案
按热度按时间nc1teljy1#
首先要注意的是,它应该是一个
get
请求,而不是post
,因此相应地更改您的python函数。serial = request.POST.get('serial')
至serial = request.GET.get('serial')
然后,而不是通过 AJAX 发送请求,尝试这种方式