gpt4 book ai didi

python - Django 和 Ajax : How can I create a csv file download from posting data through AJAX to Django?

转载 作者:行者123 更新时间:2023-11-28 17:37:28 24 4
gpt4 key购买 nike

我试图让点击触发器执行一些后端动态 csv 创建,然后将其作为 csv 下载文件返回给用户。我想我不确定除了放置 return response 之外我应该如何写出 return 语句。我看到其他一些帖子说我需要将我的 url 设置为隐藏的 iframe?虽然不确定这意味着什么。有小费吗?Ajax 看起来像这样:

       $('#download-maxes').on('click', function(){
$.ajax({
type: "POST",
url: "{{request.path}}download/",
dataType: 'json',
async: false,
data: JSON.stringify(workouts),
success: function(workoutData) {
console.log(workoutData);
},
error:function(error){
console.log(error);
}
});
});

我的 django View 如下所示:

def download(request):
#(... a lot of mongo stuff here & other things defined)
workouts = json.load(request.body)
response = HttpResponse(content_type='text/xlsx')
response['Content-Disposition'] = 'attachment; filename="team_maxes.xlsx"'
writer = csv.writer(response)
writer.writerow(['Name', 'Date', 'Workout', 'Max'])

for member in team_members.all():
for wo in workouts:
wo_data = db.activity_types.find_one({"name": wo["name"]})
best_wo = db.activity.find_one({"u_id": member.user.id, "a_t": str(wo_data["_id"]), "is_last": 1}) or 0

member_name = member.user.first_name + ' ' + member.user.last_name

try:
max_stat = best_wo["y_ts"]
except:
max_stat = 0

try:
date = best_wo["e_d"]
except:
date = ""

workout_name = wo_data["name"]

writer.writerow([member_name, date, workout_name, max_stat])

return response

最佳答案

您不需要使用 ajax。由于您正在POST一些json 数据到您的 View ,只需创建一个带有隐藏文本输入的表单,并将其值设置为json 数据。然后在表单中制作一个常规的提交按钮。

当提交表单时,服务器响应 Content-Disposition: attachment; filename="team_maxes.xlsx",您的浏览器将自动触发下载。

如果您决定走这条路,请记住:

  • 您现在使用的是常规 html 表单,使用 POST 方法,因此您必须记住在其中使用 django 的 {% csrf_token %} 标记。<
  • 您可能会在提交表单之前将输入的值设置为您的 json 字符串。
  • 您的workouts json 以表单输入的形式发送。因此,假设您将输入命名为“workouts”,在您看来您会做类似的事情:

    workouts = json.loads(request.POST.get('workouts'))

    当然还有一堆错误检查。

关于python - Django 和 Ajax : How can I create a csv file download from posting data through AJAX to Django?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com