Python 角度8+;Django RestFramework文件(csv)下载

Python 角度8+;Django RestFramework文件(csv)下载,python,django,angular,django-rest-framework,Python,Django,Angular,Django Rest Framework,我是个新手。我想下载一个CSV,点击下载按钮 django视图集 @action(detail=False, methods=['get']) def download_csv(self, request): data = { "student_data": [ { "roll_no": 12, "detail": {

我是个新手。我想下载一个CSV,点击下载按钮

django视图集

@action(detail=False, methods=['get'])
def download_csv(self, request):
        data = {
          "student_data": [
            {
              "roll_no": 12,
              "detail": {
                "name": "Tom",
                "address": "XYZ"
              }
            },
            {
              "roll_no": 8,
              "detail": {
                "name": "Ryan",
                "address": "ABC"
              }
            },
            {
              "roll_no": 12,
              "detail": {
                "name": "Tom",
                "address": "PQR"
              }
            }
          ]
        }
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename="emp_details.csv"'
        writer = csv.DictWriter(response, fieldnames=['name', 'roll', 'address'])
        writer.writeheader()
        for i in data["student_data"]:
            meta_data = i["detail"]
            detail_dict = {}
            detail_dict["name"] = meta_data["name"]
            detail_dict["address"] = meta_data["address"]
            detail_dict["roll"] = i["roll"]
            writer.writerow(address)
        return response
当我点击URL时http://localhost:8000/download_csv/ . 下载的CSV文件名为“emp_details.CSV”


现在我想把这个反应和anuglar结合起来。单击angular前端的下载按钮,我如何订阅此API端点并下载csv文件。这就是这个端点的响应(不是通常的JSON)。

我能够解决它。用下面的代码

组成部分

import * as FileSaver from 'file-saver';

onDownloadClick() 
    {
      this.serviceModule.download().subscribe(
        (res) => {
          let blob = new Blob([res], { type: 'text/csv' });
          FileSaver.saveAs(blob, "example.csv")
        }
      );
    } 
  
服务

public download(): Observable<any> {
    return this.http
      .get(
        "http://localhost:8000/download_csv/",
        { responseType: "arraybuffer" }
      )
  }
public download():可观察{
返回此文件。http
.得到(
"http://localhost:8000/download_csv/",
{响应类型:“arraybuffer”}
)
}

希望这对以后的人有帮助

python文件的开头是什么?在.ts文件中,当您执行.get时,您不需要输入python代码的名称吗?非常感谢。