Django不从查询中下载文件

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

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

  1. def download_rollback(request):
  2. serial = request.POST.get('serial')
  3. response = HttpResponse(content_type='text/csv')
  4. response['Content-Disposition'] = 'attachment; filename="{}.csv"'.format(serial)
  5. writer = csv.writer(response)
  6. writer.writerow(['timestamp','serial','log'])
  7. queryset = ConfigLog.objects.filter(ser_no=serial).filter(log__contains='ROLLBACK')
  8. for obj in queryset:
  9. writer.writerow([obj.timestamp, obj.ser_no, obj.log])
  10. return response

我有下面的urls.py:

  1. urlpatterns = [
  2. ...
  3. path('beaconing/download_rollback/', views.download_rollback,name='download_rollback'),
  4. ...
  5. ]

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

  1. function Download(ser_no){
  2. console.log('AJAX');
  3. $.ajax({
  4. type: 'POST',
  5. url: '{% url "beacon_server:download_rollback" %}',
  6. data: {
  7. serial: ser_no,
  8. type: "Download",
  9. csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
  10. action: 'post'
  11. },
  12. success: function (json) {
  13. },
  14. error: function (xhr,errmsg,err) {
  15. }
  16. });
  17. }
nc1teljy

nc1teljy1#

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

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

相关问题