首页 > 解决方案 > 如何像另存为按钮一样下载导出 csv 文件(从 ajax 请求发送数据)

问题描述

所以我想用 django 从数据库中的查询(我用 ajax 函数发送的参数)导出一个 csv 文件,我已经按照文档进行了操作,看起来很成功,但是浏览器没有保存为 .csv 文件之类的东西,我看不到我的文件是由系统创建的

这是代码

html代码

 <form class="form-horizontal  style-form" action="#">
                <div class="form-group">
                  <label class="control-label col-md-3">Database Name</label>
                  <div class="col-md-4">
                    <div class="input-group bootstrap-timepicker">
                      <div class="btn-group">
                            <select id = "tableselect"  style="width:425px;background-color:white;height:30px;font-color:red;text-align-last:center;">              
                            <!-- <li><a href="#"></a></li> -->
                            {% for table in obj2 %}
                                    <option value = "{{table}}" >{{ table }}</option>
                            {% endfor %}                          
                            <!-- <li><a href="#">Dropdown link</a></li> -->
                            </option>
                            </select>                    
                      </div>
                    </div>
                  </div>
                </div>
                <div class="form-group">
                  <button class="btn btn-theme" onclick="return appendBox()">Add</button>
                  <label class="control-label col-md-3">Column Name</label> 
                  <div class="col-md-4" id ="test">
                    <div class="input-group bootstrap-timepicker">
                       <div class="btn-group">
                            <select id = "columnselect" style="width:425px;background-color:white;height:30px;font-color:red;text-align-last:center;">              
                            </select>                
                      </div>
                    </div>
                  </div>
                </div>
                <div class="form-group">
                  <button class="btn btn-theme" onclick=" return appendFilterBox()">Add</button>
                  <label class="control-label col-md-3">Filter</label>
                  <div class="col-md-4" id="filtbox">
                    <div class="input-group bootstrap-timepicker">
                       <div class="btn-group">                          
                            <select id="conditionselect" style="width:150px;background-color:white;height:30px;font-size:15px;text-align-last:center;">                                          
                            </select>    
                            <select id="operator" style="width:120px;background-color:white;height:30px;font-size:15px;text-align-last:center;">              
                                <option> > </option>
                                <option> < </option>
                                <option> ≥ </option>
                                <option> ≤ </option>
                                <option> = </option>
                            </select>  
                            <input id="parameter" type="text" style="width:150px;background-color:white;height:30px;font-size:15px;text-align-last:center;">                                          
                            </input>                                                                 
                      </div>
                    </div>
                  </div>
                </div>
                <div class="form-group">                                                    
                  <div class="col-md-4" id="showquery">
                    <div class="input-group bootstrap-timepicker">
                       <div class="btn-group">             
                        <button id="result" class="btn btn-theme" type="submit" style="height:30px;width:100px;" onclick="return showQuery()">Show</button>

                        <button id="export" class="btn btn-theme" type="Export" style="height:30px;width:100px;" onclick="return ExportFile()">Export</button>
                       </div>
                     </div>
                   </div>
                 </div>

<script>
      $(document).ready(function() {
      $("#export").click(function () {
        var urls = "{% url 'polls:export' %}";  
        var name = $('#columnselect').val();
        var table = $('#dataselect').val();
        var column = $('#conditionselect').val();
        var operator = $('#operator').val();
        var condition = $('#parameter').val();

        $.ajax({                     
          url: urls,                    
          data: {
            'name' : name,
            'table': table,
            'column' : column,
            'operator' : operator,
            'condition' : condition
          },
          success: function(data) {   
              alert("success")
          },
          error: function(data)
          {
            alert("error occured");
          }
        });
      });
      });

  </script>
  <script>
       function ExportFile()
    {
          return false
    }
    </script>

这是意见

def export(request):
    import cx_Oracle
    data_name = request.GET.get('name',1)
    table_name = request.GET.get('table',1)
    column_name = request.GET.get('column',1)
    operator = request.GET.get('operator',1)
    condition = request.GET.get('condition',1)
    dsn_tns = cx_Oracle.makedsn('10.20.214.198', '1527', sid='dicb') 
    conn = cx_Oracle.connect(user=r'icb', password='devicb', dsn=dsn_tns) 
    c = conn.cursor() 
    c.execute("select "+data_name+" from "+table_name+" where "+column_name+operator+"'"+condition+"'")
    c.rowfactory = makeDictFactory(c)
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
    #writer = csv.writer( open("output.csv","w") )

    #writer.writerow(['First row', 'Foo', 'Bar', 'Baz'])
    #writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])
    writer = csv.writer(response)
    print(response)
    columnalldata = []
    for rowDict in c:
        columnalldata.append(rowDict[data_name])
        writer.writerow(rowDict[data_name])

    #context = {
    ##}

    return response

网址.py

 path('export/',views.export,name='export'),

我不知道我错在哪里,似乎在文档中它可以保存为文件

谢谢你的帮助

标签: djangoajax

解决方案


推荐阅读