代码之家  ›  专栏  ›  技术社区  ›  ScalaBoy

如何编码数组并通过post请求将其发送到后端

  •  0
  • ScalaBoy  · 技术社区  · 6 年前

    我使用 FileReader :

    import React, { Component } from 'react';
    import { CsvToHtmlTable } from 'react-csv-to-table';
    import ReactFileReader from 'react-file-reader';
    import Button from '@material-ui/core/Button';
    
    const sampleData = `
    NUM,WAKE,SIBT,SOBT
    1,M,2016-01-01 04:05:00,2016-01-01 14:10:00
    2,M,2016-01-01 04:05:00,2016-01-01 14:10:00
    3,M,2016-01-01 04:05:00,2016-01-01 14:10:00
    `;
    
    class CSVDataTable extends Component {
    
        state={
          csvData: sampleData
        };
    
        handleFiles = files => {
            var reader = new FileReader();
            reader.onload =  (e) => {
              // Use reader.result
              this.setState({
                csvData: reader.result
              })
              this.props.setCsvData(reader.result)
            }
            reader.readAsText(files[0]);
        }
    
        render() {
            return <div>
              <ReactFileReader
                multipleFiles={false}
                fileTypes={[".csv"]}
                handleFiles={this.handleFiles}>
                <Button
                    variant="contained"
                    color="primary"
                >
                    Load data
                </Button>
    
              </ReactFileReader>
              <CsvToHtmlTable
                data={this.state.csvData || sampleData}
                csvDelimiter=","
                tableClassName="table table-striped table-hover"
              />
        </div>
        }
    }
    
    export default CSVDataTable;
    

    那我就派 csvData 到后面去。做这件事的正确方法是什么?

    我试着送 CSV数据 ,但无法在后端正确分析它。我想 \n CSV数据 到达后端:

    fetchData = () => {
          const url = "http://localhost:8000/predict?"+
            '&wake='+this.state.wake+
            '&csvData='+JSON.stringify(this.state.csvData);
    
          fetch(url, {
            method: "POST",
            dataType: "JSON",
            headers: {
              "Content-Type": "application/json; charset=utf-8",
            }
          })
          .then((resp) => {
            return resp.json()
          })
          .then((data) => {
            this.updateDelay(data.prediction)
          })
          .catch((error) => {
            console.log(error, "catch the hoop")
          })
      };
    

    你建议我怎么寄 CSV数据 ?看起来像 JSON.stringify(this.state.csvData) 做错事。请帮我解决这个问题。谢谢。

    更新:

    我试过这个:

      fetchData = () => {
          fetch("http://localhost:8000/predict", {
            method: "POST",
            headers: {
              'Accept': 'application/json',
              'Content-Type': 'application/json',
            },
            body: JSON.stringify({
              wake: this.state.wake,
              csvData: this.state.csvData
            })
          })
          .then((resp) => {
            return resp.json()
          })
          .then((data) => {
            this.updateDelay(data.prediction)
          })
          .catch((error) => {
            console.log(error, "catch the hoop")
          })
      };
    

    但是我无法在django后端(python)接收数据:

    print(request.POST)
    

    输出:

    <QueryDict: {}>
    

    或:

    print(request.POST['csvData'])
    

    输出:

    django.utils.datastructures.MultiValueDictKeyError: 'csvData'
    

    或:

    body_unicode = request.body.decode('utf-8')
    body = json.loads(body_unicode)
    content = body['csvData']
    
    print("content",content)
    

    输出:

    从none引发jsondecodeerror(“期望值”,s,err.value) json.decoder.jsondecodeerror:应为值:第1行第1列(char 0)

    0 回复  |  直到 6 年前