django - 如何像另存为按钮一样下载导出 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'),
我不知道我错在哪里,似乎在文档中它可以保存为文件
谢谢你的帮助
解决方案
推荐阅读
- python - 为什么 read_csv skiprows 值需要低于这种情况下的值?
- javascript - 如何在另一个 div 中查找最接近的文本输入的内容
- webstorm - JetBrains WebStorm - 如何关闭自动 HTML 元素插入
- sql - 我在 sfmc 错误中得到了这个:旧式 JOIN (ANSI JOINs) 语法是不允许的。请使用标准语法
- node.js - 是否可以在 ejs 模板中使用 process.env?
- java - Set的remove方法的时间复杂度
- javascript - Reactjs 路由在所有情况下都显示加载微调器
- python - 从 Python 中的简单算术获取不正确的值
- c - 反转一个字+一大笔奖金(bug)
- javascript - JS:替换包含不同值的字符串